。NET Core 3.1通用主机实现中的ConfigureContainer

问题描述 投票:0回答: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 Framework中的样子):

var builder = new ContainerBuilder();
builder.RegisterModule(new FirstModule());
builder.RegisterModule(new SecondModule());
_container = builder.Build();

当我显式构建容器时,一切都能按预期工作,但是我的理解是,在.NET Core中我们不需要它吗?

非常感谢任何输入。

干杯!

asp.net-core .net-core autofac autofac-module microsoft.extensions.hosting
1个回答
0
投票

通过向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扩展名)。

希望有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.