在C#中,要實(shí)現(xiàn)自動(dòng)裝配(依賴注入),通常需要使用依賴注入容器。一個(gè)流行的依賴注入容器是Microsoft.Extensions.DependencyInjection。以下是如何使用這個(gè)容器實(shí)現(xiàn)自動(dòng)裝配的步驟:
IMailService
接口和一個(gè)實(shí)現(xiàn)該接口的MailService
類:public interface IMailService
{
void SendEmail(string to, string subject, string body);
}
public class MailService : IMailService
{
public void SendEmail(string to, string subject, string body)
{
// 發(fā)送郵件的邏輯
}
}
UserController
類,它依賴于IMailService
接口:public class UserController
{
private readonly IMailService _mailService;
public UserController(IMailService mailService)
{
_mailService = mailService;
}
public void RegisterUser(string username, string email)
{
// 注冊(cè)用戶的邏輯
_mailService.SendEmail(email, "注冊(cè)確認(rèn)", "歡迎注冊(cè)我們的網(wǎng)站!");
}
}
using Microsoft.Extensions.DependencyInjection;
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<IMailService, MailService>();
services.AddTransient<UserController>();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// 配置應(yīng)用程序的邏輯
}
}
在這個(gè)例子中,我們使用services.AddTransient<IMailService, MailService>();
將MailService
類注冊(cè)為IMailService
接口的瞬態(tài)(transient)依賴項(xiàng)。這意味著每次需要IMailService
實(shí)例時(shí),都會(huì)創(chuàng)建一個(gè)新的MailService
實(shí)例。同樣,我們將UserController
類注冊(cè)為瞬態(tài)依賴項(xiàng)。
Program.cs
)中,解析并調(diào)用依賴項(xiàng):var services = new ServiceCollection();
ConfigureServices(services);
var serviceProvider = services.BuildServiceProvider();
var userController = serviceProvider.GetService<UserController>();
userController.RegisterUser("username", "email@example.com");
在這個(gè)例子中,我們使用serviceProvider.GetService<UserController>();
來(lái)解析UserController
類的實(shí)例,它會(huì)自動(dòng)注入所需的IMailService
依賴項(xiàng)。這樣,我們就實(shí)現(xiàn)了自動(dòng)裝配。