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
}
}