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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

Autofac在.NET Core 中的使用

發布時間:2023/12/4 asp.net 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Autofac在.NET Core 中的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

Autofac 是一款.NET IoC 容器 . 它管理類之間的依賴關系, 從而使應用在規模及復雜性增長的情況下依然可以輕易地修改 。.NET CORE 中也內置了依賴注入,但是有些情況下需要用到Autofac去進行依賴注入,Autofac支持的所有注入方式以外,還支持屬性注入和方法注入。接下來我們通過示例來簡單了解Autofac的使用


示例

新建兩個.NET CORE 項目,一個WEB層,一個服務層

服務層中添加幾個測試服務和模塊文件

服務代碼都如圖所示

引入Autofac Nuget包文件

NetCoreAutofacServiceModule 類繼承Autofac.Module,并重寫Autofac管道中的Load方法,如下圖多種方式注入服務。接下來就是在WEB層配置Autofac,這里需要注意的是.Net Core2+ 和 .Net Core3+ 的配置方法稍有不同

.NET CORE 2+

在NET Core 2.1時候,AutoFac返回一個 IServiceProvider 參數注入到ConfigureServices .NET Core 服務中,寫法如下:

public IServiceProvider ConfigureServices(IServiceCollection services) {services.AddControllers();return AutofacProvider.RegisterForNetCore2(services); } //將定義的策略和AutoFac 一起替換內置DI public static IServiceProvider RegisterForNetCore2(IServiceCollection services) {var builder = new ContainerBuilder();builder.Populate(services);//按模塊注入服務builder.RegisterModule<NetCoreAutofacServiceModule>();var Container = builder.Build();return new AutofacServiceProvider(Container); }

.NET CORE 3+

在.NET Core3.0 使用上面的寫法,框架運行之后會報錯:

ConfigureServices returning an System.IServiceProvider isn't supported.

.NET Core 3.0 引入了具有強類型容器配置的功能。它提供了 ConfigureContainer 方法,可以在其中使用Autofac來注冊事物,而不必通過 ServiceCollection 來注冊事物。首先需要在 Program.cs 中修改服務工廠,內置是 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>(); }

最后在控制器中依賴注入服務,可以在方法上用[FromServices]注入,也可以通過構造函數注入

[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()}"; }

啟動服務看看結果服務已經注冊成功ThreeRepository 與 IThreeRepository 通過 RegisterType 方法注冊;

builder.RegisterType<ThreeRepository>().AsImplementedInterfaces();

OneService、IOneService、TwoService、ITwoService 則是通過RegisterAssemblyTypes方式注冊;

builder.RegisterAssemblyTypes(typeof(NetCoreAutofacServiceModule).Assembly).Where(a => a.Name.EndsWith("Service")).AsImplementedInterfaces();

總結

以上是生活随笔為你收集整理的Autofac在.NET Core 中的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。