ConfigureContainer in. NET Core 3.1 Generi c Реализация хоста - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь перенести наш каркасный проект на. NET Core 3.1. В рамках миграции я пытаюсь зарегистрировать модули с помощью метода ConfigureContainer, предоставленного GenericHost. Вот что у меня есть:

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?

Любые замечания приветствуются.

Приветствия!

1 Ответ

0 голосов
/ 06 мая 2020

Указывая 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 будет IO C Контейнером вашей AS PNET Core области приложения.
Обратите внимание, что компоновщик не собирается в любое время. Это будет сделано IHostBuilder в какой-то момент (используя расширение Autofa c).

Надеюсь, что поможет.

...