在C#中,實現IoC(Inversion of Control,控制反轉)通常使用依賴注入(Dependency Injection,DI)來實現。依賴注入是一種設計模式,它允許將對象之間的依賴關系從硬編碼轉移到外部容器或框架中,從而降低代碼之間的耦合度。
在C#中,有幾個流行的依賴注入框架可以幫助你實現IoC,如Autofac、Ninject和Microsoft.Extensions.DependencyInjection等。下面以Microsoft.Extensions.DependencyInjection為例,介紹如何實現IoC。
dotnet add package Microsoft.Extensions.DependencyInjection
public interface IMessageService
{
string GetMessage();
}
public class EmailService : IMessageService
{
public string GetMessage()
{
return "Hello from EmailService!";
}
}
public class NotificationService
{
private readonly IMessageService _messageService;
public NotificationService(IMessageService messageService)
{
_messageService = messageService;
}
public void SendNotification()
{
var message = _messageService.GetMessage();
Console.WriteLine(message);
}
}
using Microsoft.Extensions.DependencyInjection;
class Program
{
static void Main(string[] args)
{
// 創建服務容器
var serviceCollection = new ServiceCollection();
// 注冊依賴關系
serviceCollection.AddTransient<IMessageService, EmailService>();
serviceCollection.AddTransient<NotificationService>();
// 解析依賴關系并創建實例
var serviceProvider = serviceCollection.BuildServiceProvider();
var notificationService = serviceProvider.GetService<NotificationService>();
// 使用依賴項
notificationService.SendNotification();
}
}
在這個例子中,我們使用AddTransient
方法將IMessageService接口與EmailService實現類注冊為瞬態(Transient)依賴關系。這意味著每次請求IMessageService時,都會創建一個新的EmailService實例。然后,我們將NotificationService注冊為依賴項,并在需要時解析它。
這樣,我們就實現了IoC,將依賴關系從NotificationService中移除,使其更加靈活和可測試。