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策略
最后在控制器中依賴注入服務,可以在方法上用[FromServices]注入,也可以通過構造函數注入
啟動服務看看結果服務已經注冊成功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 中的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 教你配置windows上的windbg,
- 下一篇: 详解.NET Core 依赖注入生命周期