网站中页面链接怎么做的,程序源代码下载网站,网站开发 报价,施工企业负责人是指企业的什么人前言Autofac 是一款.NET IoC 容器 . 它管理类之间的依赖关系, 从而使应用在规模及复杂性增长的情况下依然可以轻易地修改 。.NET CORE 中也内置了依赖注入#xff0c;但是有些情况下需要用到Autofac去进行依赖注入#xff0c;Autofac支持的所有注入方式以外#xff0c;还支持… 前言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.RegisterModuleNetCoreAutofacServiceModule();var Container builder.Build();return new AutofacServiceProvider(Container);
}
.NET CORE 3 在.NET Core3.0 使用上面的写法框架运行之后会报错 ConfigureServices returning an System.IServiceProvider isnt supported..NET Core 3.0 引入了具有强类型容器配置的功能。它提供了 ConfigureContainer 方法可以在其中使用Autofac来注册事物而不必通过 ServiceCollection 来注册事物。首先需要在 Program.cs 中修改服务工厂内置是 ServiceProviderFactory 的修改指定为AutofacServiceProviderFactory 。public static IHostBuilder CreateHostBuilder(string[] args) Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder {webBuilder.UseStartupStartup();}).UseServiceProviderFactory(new AutofacServiceProviderFactory());然后在 Startup.cs 中添加方法 ConfigureContainer 并配置Autofac策略 public void ConfigureContainer(ContainerBuilder builder)
{AutofacProvider.RegisterForNetCore3(builder);
}
public static void RegisterForNetCore3(ContainerBuilder builder)
{builder.RegisterModuleNetCoreAutofacServiceModule();
}
最后在控制器中依赖注入服务可以在方法上用[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.RegisterTypeThreeRepository().AsImplementedInterfaces();
OneService、IOneService、TwoService、ITwoService 则是通过RegisterAssemblyTypes方式注册builder.RegisterAssemblyTypes(typeof(NetCoreAutofacServiceModule).Assembly).Where(a a.Name.EndsWith(Service)).AsImplementedInterfaces();