我正在尝试将我们的框架项目迁移到.NET Core 3.1。作为迁移的一部分,我试图通过GenericHost提供的ConfigureContainer方法注册模块。这就是我所拥有的:
Host.CreateDefaultBuilder(args)
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureContainer<ContainerBuilder>(builder => builder.RegisterModule(new
WorkerServiceDependencyResolver.WorkerServiceDependencyResolver()))
而且我的WorkerServiceDependencyResolver具有以下内容:
builder.RegisterModule(new FirstModule());
builder.RegisterModule(new SecondModule());
但是当我这样做时,我的应用程序不会运行,它启动时不会出现任何错误,但不会执行任何操作。
但是如果我这样写(这就是我们在.NET Framework中的样子):
var builder = new ContainerBuilder();
builder.RegisterModule(new FirstModule());
builder.RegisterModule(new SecondModule());
_container = builder.Build();
当我显式构建容器时,一切都能按预期工作,但是我的理解是,在.NET Core中我们不需要它吗?
非常感谢任何输入。
干杯!
通过向IHostBuilder
指定服务提供商工厂是AutofacServiceProviderFactory
,它允许您在Startup
类内部创建一个称为ConfigureContainer
的方法,该方法将ContainerBuilder
作为参数。
这是实例化IHostBuilder
的方式。只要按照ASP NET Core指南。
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
然后,在Startup
类中,添加该方法。
public class Startup
{
public Startup(IConfiguration configuration) => Configuration = configuration;
public IConfiguration Configuration { get; }
// ...
public void ConfigureContainer(ContainerBuilder builder)
{
// Here you register your dependencies
builder.RegisterModule<FirstModule>();
}
// ...
}
然后,您的IContainer
将成为ASPNET Core应用程序范围的IOC容器。请注意,构建器不会在任何时候构建。这将由IHostBuilder
在某些时候完成(使用Autofac扩展名)。
希望有所帮助。