1、Autofac的配置
如果您需要更灵活地构建容器的方式,或者如果您需要实际存储对构建容器的引用,则需要跳过使用ConfigureContainer
并在ConfigureServices
期间注册所有内容。 这也是您为ASP.NET Core 1.0采用的途径方法。
1)通过Microsoft.Extensions.DependencyInjection
包在ASP .NET Core应用程序中使用用Autofac。
在Nuget管理程序中,搜索'Autofac.Extensions.DependencyInjection
' =》选中然后点击'安装
'
2)使用ContainerBuilder(Populate)配置
在Startup
类的ConfigureServices
方法中
- 通过
Populate
将服务从IServiceCollection
注册到ContainerBuilder
。 - 直接在
ContainerBuilder
中注册服务。 - Build容器(container)
- 使用容器创建一个
AutofacServiceProvider
并将其返回。
2、在ASP .NET Core中使用ContainerBuilder(Populate)配置Autofac示例代码
public class Startup { public Startup(IHostingEnvironment env) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) .AddEnvironmentVariables(); this.Configuration = builder.Build(); } public IContainer ApplicationContainer { get; private set; } public IConfigurationRoot Configuration { get; private set; } //在ConfigureServices中注册依赖项。 //在下面的Configure方法之前由运行时调用。 public IServiceProvider ConfigureServices(IServiceCollection services) { //将服务添加到集合中。 services.AddMvc(); //创建 container builder. var builder = new ContainerBuilder(); //注册依赖项,填充服务 //集合,并构建容器。 // //请注意,Populate基本上是添加内容的foreach //进入集合中的Autofac。 如果你注册 //在Autofac之前的东西填充然后填充的东西 // ServiceCollection可以覆盖那些东西; 如果你注册 // AFTER填充这些注册可以覆盖的东西 //在ServiceCollection中。 根据需要混合搭配。 builder.Populate(services); builder.RegisterType<MyType>().As<IMyType>(); this.ApplicationContainer = builder.Build(); //根据容器创建IServiceProvider return new AutofacServiceProvider(this.ApplicationContainer); } //配置是添加中间件的位置。 这称之为 // ConfigureServices。 您可以使用IApplicationBuilder.ApplicationServices //如果你需要从容器中解决问题。 public void Configure( IApplicationBuilder app, ILoggerFactory loggerFactory, IApplicationLifetime appLifetime) { loggerFactory.AddConsole(this.Configuration.GetSection("Logging")); loggerFactory.AddDebug(); app.UseMvc(); //从Autofac.Extensions.DependencyInjection 4.3.0开始,AutofacDependencyResolver //实现IDisposable并将与应用程序容器一起处理 //当应用程序停止并且WebHost处理它时 // //在4.3.0之前,如果要处理已在中解析的资源 //应用程序容器,注册“ApplicationStopped”事件。 //如果直接引用容器,则只能执行此操作 //所以它不适用于上面的ConfigureContainer机制。 // appLifetime.ApplicationStopped.Register(()=> this.ApplicationContainer.Dispose()); //Cóng Autofac.Extensions.DependencyInjection 4.3.0 } }