MST

星途 面试题库

面试题:C#中依赖注入的常见方式有哪些

在C#开发中,依赖注入是实现控制反转模式的关键手段。请阐述C#中进行依赖注入的常见方式,并各举一个简单代码示例说明。
34.0万 热度难度
编程语言C#

知识考点

AI 面试

面试题答案

一键面试

构造函数注入

通过构造函数将依赖对象传递进来。

public interface ILogger
{
    void Log(string message);
}

public class ConsoleLogger : ILogger
{
    public void Log(string message)
    {
        Console.WriteLine($"Log: {message}");
    }
}

public class UserService
{
    private readonly ILogger _logger;
    public UserService(ILogger logger)
    {
        _logger = logger;
    }

    public void DoWork()
    {
        _logger.Log("UserService is doing work.");
    }
}

// 使用
class Program
{
    static void Main()
    {
        ILogger logger = new ConsoleLogger();
        UserService userService = new UserService(logger);
        userService.DoWork();
    }
}

属性注入

通过属性将依赖对象赋值。

public interface IEmailSender
{
    void SendEmail(string to, string subject, string body);
}

public class EmailSender : IEmailSender
{
    public void SendEmail(string to, string subject, string body)
    {
        Console.WriteLine($"Sending email to {to}: {subject}, {body}");
    }
}

public class OrderService
{
    public IEmailSender EmailSender { get; set; }

    public void PlaceOrder()
    {
        if (EmailSender != null)
        {
            EmailSender.SendEmail("customer@example.com", "Order Placed", "Your order has been placed.");
        }
    }
}

// 使用
class Program
{
    static void Main()
    {
        OrderService orderService = new OrderService();
        orderService.EmailSender = new EmailSender();
        orderService.PlaceOrder();
    }
}

方法注入

通过方法参数传递依赖对象。

public interface IMessageGenerator
{
    string GenerateMessage();
}

public class WelcomeMessageGenerator : IMessageGenerator
{
    public string GenerateMessage()
    {
        return "Welcome to our application!";
    }
}

public class GreetingService
{
    public void ShowGreeting(IMessageGenerator messageGenerator)
    {
        string message = messageGenerator.GenerateMessage();
        Console.WriteLine(message);
    }
}

// 使用
class Program
{
    static void Main()
    {
        GreetingService greetingService = new GreetingService();
        IMessageGenerator messageGenerator = new WelcomeMessageGenerator();
        greetingService.ShowGreeting(messageGenerator);
    }
}