Autofac在.NET Core 中的使用
前言
Autofac 是一款.NET IoC 容器 . 它管理類之間的依賴關(guān)系, 從而使應(yīng)用在規(guī)模及復(fù)雜性增長(zhǎng)的情況下依然可以輕易地修改 。.NET CORE 中也內(nèi)置了依賴注入,但是有些情況下需要用到Autofac去進(jìn)行依賴注入,Autofac支持的所有注入方式以外,還支持屬性注入和方法注入。接下來(lái)我們通過(guò)示例來(lái)簡(jiǎn)單了解Autofac的使用
示例
新建兩個(gè).NET CORE 項(xiàng)目,一個(gè)WEB層,一個(gè)服務(wù)層
服務(wù)層中添加幾個(gè)測(cè)試服務(wù)和模塊文件
服務(wù)代碼都如圖所示
引入Autofac Nuget包文件
NetCoreAutofacServiceModule 類繼承Autofac.Module,并重寫(xiě)Autofac管道中的Load方法,如下圖多種方式注入服務(wù)。接下來(lái)就是在WEB層配置Autofac,這里需要注意的是.Net Core2+ 和 .Net Core3+ 的配置方法稍有不同
.NET CORE 2+
在NET Core 2.1時(shí)候,AutoFac返回一個(gè) IServiceProvider 參數(shù)注入到ConfigureServices .NET Core 服務(wù)中,寫(xiě)法如下:
public IServiceProvider ConfigureServices(IServiceCollection services) {services.AddControllers();return AutofacProvider.RegisterForNetCore2(services); } //將定義的策略和AutoFac 一起替換內(nèi)置DI public static IServiceProvider RegisterForNetCore2(IServiceCollection services) {var builder = new ContainerBuilder();builder.Populate(services);//按模塊注入服務(wù)builder.RegisterModule<NetCoreAutofacServiceModule>();var Container = builder.Build();return new AutofacServiceProvider(Container); }.NET CORE 3+
在.NET Core3.0 使用上面的寫(xiě)法,框架運(yùn)行之后會(huì)報(bào)錯(cuò):
ConfigureServices returning an System.IServiceProvider isn't supported.
.NET Core 3.0 引入了具有強(qiáng)類型容器配置的功能。它提供了 ConfigureContainer 方法,可以在其中使用Autofac來(lái)注冊(cè)事物,而不必通過(guò) ServiceCollection 來(lái)注冊(cè)事物。首先需要在 Program.cs 中修改服務(wù)工廠,內(nèi)置是 ServiceProviderFactory 的,修改指定為:AutofacServiceProviderFactory 。
public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>();}).UseServiceProviderFactory(new AutofacServiceProviderFactory()); 然后在 Startup.cs 中添加方法 ConfigureContainer ,并配置Autofac策略
最后在控制器中依賴注入服務(wù),可以在方法上用[FromServices]注入,也可以通過(guò)構(gòu)造函數(shù)注入
啟動(dòng)服務(wù)看看結(jié)果服務(wù)已經(jīng)注冊(cè)成功ThreeRepository 與 IThreeRepository 通過(guò) RegisterType 方法注冊(cè);
builder.RegisterType<ThreeRepository>().AsImplementedInterfaces();OneService、IOneService、TwoService、ITwoService 則是通過(guò)RegisterAssemblyTypes方式注冊(cè);
builder.RegisterAssemblyTypes(typeof(NetCoreAutofacServiceModule).Assembly).Where(a => a.Name.EndsWith("Service")).AsImplementedInterfaces();總結(jié)
以上是生活随笔為你收集整理的Autofac在.NET Core 中的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 教你配置windows上的windbg,
- 下一篇: asp.net ajax控件工具集 Au