【问题标题】:Service Fabric AspNet Core 3.1 Autofac WebHostBuilderService Fabric AspNet Core 3.1 Autofac WebHostBuilder
【发布时间】:2020-05-15 18:17:06
【问题描述】:

我有 Service Fabric 无状态 asp.net core 2.2 应用程序。我试图将其升级到 asp.net core 3.1。我正在使用 autofac 依赖注入容器。根据 autofac 文档 DI 注册已移动 从 WebHostBuilder 到通用 HostBuilder https://autofaccn.readthedocs.io/en/latest/integration/aspnetcore.html#asp-net-core-3-0-and-generic-hosting。但是 Service Fabric 不支持 asp.net core Generic Host https://github.com/microsoft/service-fabric-aspnetcore/issues/48

有没有其他方法在WebHostBuilder中注册Autofac?

【问题讨论】:

  • 欢迎来到 SO!当您提出问题时,请尝试添加最少的内容:输入样本、预期输出样本、您尝试了什么、研究以及您卡在哪里。所以留下一个问题,向我们展示您的代码,您尝试了什么以及您的研究:stackoverflow.com/help/how-to-ask
  • 您找到什么可以帮助您解决这个问题了吗?我也有同样的问题

标签: autofac azure-service-fabric asp.net-core-3.1 service-fabric-stateless


【解决方案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();
                    }))
    };
}

【讨论】:

    猜你喜欢
    • 2017-05-11
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 2016-09-18
    • 2018-07-11
    • 2023-04-06
    • 2020-04-25
    • 1970-01-01
    相关资源
    最近更新 更多