在 ASP.NET Core 3.0 中配置 Autofac 的推荐方法
Recommended way to configure Autofac in ASP.NET Core 3.0
在 ASP.NET Core 2.0 中,我在 Startup
class 上使用了 ConfigureServices
方法来连接 Autofac,包装现有的 services
注册并添加额外的一个。
public IServiceProvider ConfigureServices(IServiceCollection services)
{
// Standard service registrations (ex: services.AddMvc())
// ...
// Autofac
var builder = new ContainerBuilder();
builder.Populate(services); // wrap service registrations
builder.RegisterModule<MyModule>(); // add extra registrations
this.ApplicationContainer = builder.Build();
return new AutofacServiceProvider(this.ApplicationContainer);
}
由于 ConfigureService
方法在 ASP.NET Core 3.0 中是 void
并且不再支持 return 参数 IServiceProvider
,我该如何连接 Autofac?
ASP.NETCore 3.0IHostBuilder
有扩展方法UseServiceProviderFactory
,可以用来注册AutofacServiceProviderFactory
:
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder => {
webBuilder.UseStartup<Startup>();
})
.UseServiceProviderFactory(new AutofacServiceProviderFactory());
}
注册提供者将自动包装在void ConfigureServices(IServiceCollection services)
方法中注册的所有标准服务。
不需要行:
public void ConfigureContainer(ContainerBuilder builder)
{
// ...
builder.Populate(services); // Not needed!
// ...
return new AutofacServiceProvider(this.ApplicationContainer); // Not needed!
}
要添加额外的 Autofac 特定注册,ConfigureContainer(ContainerBuilder builder)
启动方法class 可以使用:
public partial class Startup
{
public void ConfigureContainer(Autofac.ContainerBuilder builder)
{
builder.RegisterModule<MyModule>();
}
}
可以在 Github issue 中找到更多信息。
在 ASP.NET Core 2.0 中,我在 Startup
class 上使用了 ConfigureServices
方法来连接 Autofac,包装现有的 services
注册并添加额外的一个。
public IServiceProvider ConfigureServices(IServiceCollection services)
{
// Standard service registrations (ex: services.AddMvc())
// ...
// Autofac
var builder = new ContainerBuilder();
builder.Populate(services); // wrap service registrations
builder.RegisterModule<MyModule>(); // add extra registrations
this.ApplicationContainer = builder.Build();
return new AutofacServiceProvider(this.ApplicationContainer);
}
由于 ConfigureService
方法在 ASP.NET Core 3.0 中是 void
并且不再支持 return 参数 IServiceProvider
,我该如何连接 Autofac?
ASP.NETCore 3.0IHostBuilder
有扩展方法UseServiceProviderFactory
,可以用来注册AutofacServiceProviderFactory
:
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder => {
webBuilder.UseStartup<Startup>();
})
.UseServiceProviderFactory(new AutofacServiceProviderFactory());
}
注册提供者将自动包装在void ConfigureServices(IServiceCollection services)
方法中注册的所有标准服务。
不需要行:
public void ConfigureContainer(ContainerBuilder builder)
{
// ...
builder.Populate(services); // Not needed!
// ...
return new AutofacServiceProvider(this.ApplicationContainer); // Not needed!
}
要添加额外的 Autofac 特定注册,ConfigureContainer(ContainerBuilder builder)
启动方法class 可以使用:
public partial class Startup
{
public void ConfigureContainer(Autofac.ContainerBuilder builder)
{
builder.RegisterModule<MyModule>();
}
}
可以在 Github issue 中找到更多信息。