我遇到一个有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作为控制器吗?
答案 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);
})
...