面试题答案
一键面试构造函数注入
通过构造函数将依赖对象传递进来。
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);
}
}