[英]Recommended way to configure Autofac in ASP.NET Core 3.0
In ASP.NET Core 2.0, I used ConfigureServices
method on Startup
class to wire-up Autofac, wrap existing services
registrations and add additional once.在 ASP.NET Core 2.0 中,我在
Startup
类上使用了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);
}
Since ConfigureService
method is void
in ASP.NET Core 3.0 and no longer supports return parameter IServiceProvider
, how do I wire up Autofac?由于
ConfigureService
方法在 ASP.NET Core 3.0 中void
并且不再支持返回参数IServiceProvider
,我该如何连接 Autofac?
ASP.NET Core 3.0 IHostBuilder
has extension method UseServiceProviderFactory
, which can be used to register AutofacServiceProviderFactory
: ASP.NET Core 3.0
IHostBuilder
具有扩展方法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());
}
Registered provider will automatically wrap all standard services registered in void ConfigureServices(IServiceCollection services)
method.注册的提供者将自动包装所有在
void ConfigureServices(IServiceCollection services)
方法中注册的标准服务。
There is no need for lines:不需要行:
public void ConfigureContainer(ContainerBuilder builder)
{
// ...
builder.Populate(services); // Not needed!
// ...
return new AutofacServiceProvider(this.ApplicationContainer); // Not needed!
}
To add additional Autofac-specific registrations , ConfigureContainer(ContainerBuilder builder)
method on startup class can be used:要添加额外的Autofac 特定注册,可以使用启动类上的
ConfigureContainer(ContainerBuilder builder)
方法:
public partial class Startup
{
public void ConfigureContainer(Autofac.ContainerBuilder builder)
{
builder.RegisterModule<MyModule>();
}
}
Additional info can be found in this Github issue .可以在此Github 问题中找到其他信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.