1、Autofac的配置
ASP.NET Core 1.1引入了具有强类型容器配置的能力。 它提供了一个ConfigureContainer
方法,您可以使用Autofac单独注册,而不是使用ServiceCollection
注册。
1)安装Autofac的Nuget包
在Nuget管理程序中,搜索'Autofac.Extensions.DependencyInjection
' =》选中然后点击'安装
'
2)使用ConfigureContainer配置
- 在配置
WebHostBuilder
的Program.Main
方法中,调用AddAutofac
将Autofac挂钩到启动管道中。 - 在
Startup
类的ConfigureServices
方法中,使用其他库提供的扩展方法将内容注册到IServiceCollection
中。 - 在
Startup
类的ConfigureContainer
方法中,将内容直接注册到AutofacContainerBuilder
中。
IServiceProvider
将自动为您创建,因此除了注册外,您无需做任何事情。
2、在ASP .NET Core中使用ConfigureContainer配置Autofac示例代码
public class Program
{
public static void Main(string[] args)
{
//此处的ConfigureServices调用允许
//在Startup with中支持ConfigureContainer
//一个强类型的ContainerBuilder。
var host = new WebHostBuilder()
.UseKestrel()
.ConfigureServices(services => services.AddAutofac())
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
}
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 IConfigurationRoot Configuration { get; private set; }
//在ConfigureServices中注册依赖项。
//在下面的ConfigureContainer方法之前由运行时调用。
public void ConfigureServices(IServiceCollection services)
{
//将服务添加到集合中。 不建造或返回
//任何IServiceProvider或ConfigureContainer方法
//不会被调用。
services.AddMvc();
}
//您可以在ConfigureContainer中直接注册内容
//使用Autofac。 这在ConfigureServices之后运行
//这里将覆盖在ConfigureServices中进行的注册。
//不要建造容器; 为你做完了。 如果你
//需要对容器的引用,你需要使用
//后面会显示“没有ConfigureContainer”机制。
public void ConfigureContainer(ContainerBuilder builder)
{
builder.RegisterModule(new AutofacModule());
}
//配置是添加中间件的位置。 这称之为
// ConfigureContainer。 您可以使用IApplicationBuilder.ApplicationServices
//如果你需要从容器中解决问题。
public void Configure(
IApplicationBuilder app,
ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(this.Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
app.UseMvc();
}
}
相关文档:ASP .NET Core Autofac 4.0使用ContainerBuilder(Populate)配置和示例代码