日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

Autofac在.NET Core 中的使用

發(fā)布時(shí)間:2023/12/4 asp.net 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Autofac在.NET Core 中的使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

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策略 

public void ConfigureContainer(ContainerBuilder builder) {AutofacProvider.RegisterForNetCore3(builder); } public static void RegisterForNetCore3(ContainerBuilder builder) {builder.RegisterModule<NetCoreAutofacServiceModule>(); }

最后在控制器中依賴注入服務(wù),可以在方法上用[FromServices]注入,也可以通過(guò)構(gòu)造函數(shù)注入

[HttpGet] [Route("GetName")] public string GetName([FromServices] IThreeRepository threeRepository,[FromServices] IOneService oneService,[FromServices] ITwoService twoService) {return $"【threeRepository】 : {threeRepository.GetName()}; 【oneService】 : {oneService.GetName()} ; 【twoService】 : {twoService.GetName()}"; }

啟動(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。