目錄
使用.net core 3.1
默認的依賴注入
先看看.NET Core的,默認依賴注入
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddScoped<IUserInfoService, UserInfoService>();
services.AddScoped<IOrderInfoService, OrderInfoService>();
}
然後在控制器使用即可
public IUserInfoService UserInfoService { get; }
public HomeController(ILogger<HomeController> logger, IUserInfoService userInfoService)
{
_logger = logger;
UserInfoService = userInfoService;
List<UserInfo> userInfos = UserInfoService.GetAll();
}
這樣就好了
我們可以使用第三方的插件進行依賴注入,例如使用Autofac
Autofac
引入包
Autofac
Autofac.Extensions.DependencyInjection
方法一
在Program中,添加Autofac服務
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
}).UseServiceProviderFactory(new AutofacServiceProviderFactory());
在Startup中添加
public void ConfigureContainer(ContainerBuilder builder)
{
builder.RegisterType<UserInfoService>().As<IUserInfoService>();
builder.RegisterType<OrderInfoService>().As<IOrderInfoService>();
}
方法二
新建AutofacModule類,繼承Module
public class AutofacModule : Module
{
protected override void Load(ContainerBuilder builder)
{
builder.RegisterType<UserInfoService>().As<IUserInfoService>();
builder.RegisterType<OrderInfoService>().As<IOrderInfoService>();
}
}
同樣在Startup中添加
public void ConfigureContainer(ContainerBuilder builder)
{
builder.RegisterModule(new AutofacModule());
}
然後就可以了
方法三
通過json文件配置
還需添加兩個包
Autofac.Configuration
Microsoft.Extensions.Configuration.Json
新建Autofac.json文件,記得將文件設置爲始終複製
{
"components": [
{
"type": "AutofacTest.BLL.UserInfoService,AutofacTest.BLL",
"services": [
{
"type": "AutofacTest.IBLL.IUserInfoService,AutofacTest.IBLL"
}
],
"instanceScope": "single-instance",
"injectProperties": true
},
{
"type": "AutofacTest.BLL.OrderInfoService,AutofacTest.BLL",
"services": [
{
"type": "AutofacTest.IBLL.IOrderInfoService,AutofacTest.IBLL"
}
],
"instanceScope": "single-instance",
"injectProperties": true
}
]
}
在Startup中添加
public void ConfigureContainer(ContainerBuilder builder)
{
IConfigurationBuilder config = new ConfigurationBuilder();
config.Add(new JsonConfigurationSource() { Path = "Autofac.json" });
builder.RegisterModule(new ConfigurationModule(config.Build()));
}
Autofac批量注入
通過程序集來依賴注入
只要指定程序集路徑即可
在Startup中
public void ConfigureContainer(ContainerBuilder builder)
{
var bllFilePath = System.IO.Path.Combine(AppContext.BaseDirectory, "AutofacTest.BLL.dll");
builder.RegisterAssemblyTypes(Assembly.LoadFile(bllFilePath)).AsImplementedInterfaces();
}
參考: