0

我正在尝试将我们的框架项目迁移到 .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 中不需要它?

非常感谢任何输入。

干杯!

4

1 回答 1

0

通过将IHostBuilderService Provider Factory指定为AutofacServiceProviderFactory,它允许您在Startup类中创建一个方法,该方法ConfigureContainerContainerBuilder为参数。

这就是您将如何实例化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 容器。 请注意,构建器在任何时候都不会被构建。这将在某个时候完成(使用Autofac扩展)。
IHostBuilder

希望有帮助。

于 2020-05-06T11:16:08.810 回答