在AutoFac容器之间共享实例

时间:2018-07-05 15:33:20

标签: c# autofac azure-service-fabric

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

我的容器中有一个PriceService实例,该实例创建了Program.cs的Main方法。

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

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

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

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

有人尝试过这种方法吗?

其他信息

我的容器始终是在Program.cs的Main方法中创建的

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

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

附加说明 我认为这里的实际问题可能有所不同,我在注册控制器时正在调用InstancePerCall。这反过来似乎在创建我的服务的新实例,而不是使用现有实例。因此,也许我的问题应该是如何避免这种情况?我不能使用SingleInstance作为控制器吗?

1 个答案:

答案 0 :(得分:0)

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

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

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

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