依賴注入(Dependency Injection,DI)是一種實(shí)現(xiàn)控制反轉(zhuǎn)(Inversion of Control,IoC)的技術(shù),它允許我們將依賴關(guān)系從代碼中抽象出來(lái),使組件更易于測(cè)試和維護(hù)。在C# .NET中,依賴注入可以通過(guò)多種方式實(shí)現(xiàn),如構(gòu)造函數(shù)注入、屬性注入和方法注入。
以下是依賴注入在C# .NET中的基本工作原理:
IServiceCollection
的Add
方法將實(shí)現(xiàn)類添加到容器中。以下是一個(gè)簡(jiǎn)單的示例,演示了如何在C# .NET中使用依賴注入:
// 定義接口
public interface IMessageService
{
string GetMessage();
}
// 實(shí)現(xiàn)接口
public class EmailService : IMessageService
{
public string GetMessage()
{
return "Hello from EmailService!";
}
}
// 使用依賴注入的類
public class NotificationController
{
private readonly IMessageService _messageService;
// 通過(guò)構(gòu)造函數(shù)注入依賴項(xiàng)
public NotificationController(IMessageService messageService)
{
_messageService = messageService;
}
public void SendNotification()
{
string message = _messageService.GetMessage();
Console.WriteLine(message);
}
}
// 應(yīng)用程序啟動(dòng)類
public class Program
{
public static void Main(string[] args)
{
// 創(chuàng)建服務(wù)容器
var services = new ServiceCollection();
// 注冊(cè)依賴項(xiàng)
services.AddTransient<IMessageService, EmailService>();
// 創(chuàng)建服務(wù)容器實(shí)例
var serviceProvider = services.BuildServiceProvider();
// 使用依賴注入的類
var notificationController = serviceProvider.GetService<NotificationController>();
notificationController.SendNotification();
}
}
在上面的示例中,我們定義了一個(gè)IMessageService
接口和一個(gè)實(shí)現(xiàn)該接口的EmailService
類。然后,我們創(chuàng)建了一個(gè)NotificationController
類,它通過(guò)構(gòu)造函數(shù)注入IMessageService
依賴項(xiàng)。在Main
方法中,我們使用ServiceCollection
注冊(cè)依賴項(xiàng),并使用BuildServiceProvider
方法創(chuàng)建服務(wù)容器實(shí)例。最后,我們使用GetService
方法獲取NotificationController
實(shí)例,并調(diào)用其SendNotification
方法。