【问题标题】:Share instance between AutoFac containers在 AutoFac 容器之间共享实例
【发布时间】:2018-12-14 03:56:45
【问题描述】:

我有一个问题,我有一个有 2 个 AutoFac 容器的无状态服务

我的容器中有一个 PriceService 实例,它是由 Program.cs 的 Main 方法创建的

在我的 Startup.cs 中创建了第二个容器(这是不可避免的,因为为 Web API 设置 AutoFac 需要不同的逻辑)

这给我带来了一个问题,因为当我去解析 IPriceService 时,我得到了一个不包含数据的服务,因为 Startup 创建了一个新实例

我已经了解了如何将 2 个容器合并在一起,但是如何获取在我的 Program.cs Main 方法中创建的容器?

如果我能得到它,我计划创建一个不包含 IPriceService 的新容器,然后将我的 PriceService 从 ServiceFabric 容器添加到我的容器中,以供 Web API 端使用

有人试过这样的吗?

额外信息

我的容器一直是在 Program.cs 的 Main 方法中创建的

我不能有 1 个容器,因为要将 AutoFac 用于 MVC/控制器,您需要集成仅在启动类中可用的服务

没有在正确的时间调用启动类,因此无法将这些额外信息放入我的主容器中

补充说明 我认为这里的实际问题可能有点不同,我在注册控制器时调用了 InstancePerCall。这反过来似乎创建了我的服务的一个新实例,而不是使用现有的。所以也许我的问题应该是如何避免这种情况?我不能将 SingleInstance 用于控制器吗?

【问题讨论】:

标签: c# autofac azure-service-fabric


【解决方案1】:

如果你在 Program.cs Main 中注册你的服务,你可以将它注入到 Service Fabric Service 构造函数中:

public MySFService(IMyRegistredService myRegistredService, StatelessServiceContext context) : base(context)
{
    this.myRegistredService = myRegistredService;
}

然后在创建 WebHost 时,您可以在 WebAPI 中注册此服务:

new WebHostBuilder().UseKestrel()
    .ConfigureServices(services =>
    {
        services.AddSingleton(myRegistredService);
    })
    ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-19
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-18
    相关资源
    最近更新 更多