在.NET Core 3.1通用主机实现中配置容器



我正在尝试将我们的框架项目迁移到.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框架中的做法(:

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核心指南

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核心应用程序范围的IOC容器
请注意,建设者在任何时候都没有被建造。这将由IHostBuilder在某个时刻完成(使用Autofac扩展(。

希望能有所帮助。

相关内容

  • 没有找到相关文章

最新更新