Service Fabric AspNet Core 3.1 Autofac WebHostBuilder

У меня есть приложение asp.net core 2.2 без сохранения состояния служебной фабрики. Я пытаюсь обновить это до asp.net core 3.1. Я использую контейнер для инъекций зависимостей autofac. Согласно документации autofac регистрация DI перенесена из WebHostBuilder в Generic HostBuilder https://autofaccn.readthedocs.io/en/latest/integration/aspnetcore.html#asp-net-core-3-0-and-generic-hosting. Но Service Fabric не поддерживает основной общий хост asp.net https://github.com/microsoft/service-fabric-aspnetcore/issues/48.

Есть ли другой способ зарегистрировать Autofac в WebHostBuilder?


person Senthil Palani    schedule 30.01.2020    source источник
comment
Добро пожаловать в SO! Когда вы размещаете вопрос, постарайтесь добавить минимум содержания: входной образец, ожидаемый выходной образец, что вы пробовали, исследование и где вы застряли. Так что оставьте вопрос, покажите нам свой код, что вы пробовали и свое исследование: stackoverflow.com/help/how-to- спросить   -  person borchvm    schedule 30.01.2020
comment
Вы узнали что-нибудь, что могло бы вам помочь в этом? У меня такая же проблема   -  person diegosasw    schedule 09.10.2020


Ответы (1)


Я думаю, что официальная позиция заключается в том, что вы должны сами предоставить общую реализацию хоста (https://github.com/Microsoft/service-fabric-aspnetcore/issues/48)

Однако я думаю, что у меня есть обходной путь для вас (я сам только начал его использовать). Вам нужно изменить его, чтобы настроить все, что вы делаете, но важная строка services.Replace(ServiceDescriptor.Singleton<IServiceProviderFactory<ContainerBuilder>>(new AutofacServiceProviderFactory(null)));

protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
    return new[]
    {
        new ServiceInstanceListener(
            serviceContext => new KestrelCommunicationListener(
                serviceContext,
                (url, listener) =>
                    {
                        return WebHost
                            .CreateDefaultBuilder()
                            .ConfigureServices(services =>
                            {
                                services.Replace(ServiceDescriptor.Singleton<IServiceProviderFactory<ContainerBuilder>>(new AutofacServiceProviderFactory(null)));
                                services.AddSingleton(serviceContext)
                            })
                            .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.UseUniqueServiceUrl | ServiceFabricIntegrationOptions.UseReverseProxyIntegration)
                            .UseStartup<TStartupType>()
                            .Build();
                    }))
    };
}
person Esben Bach    schedule 26.02.2021