有状态服务的dependency injection

我有一个Service Fabric状态服务,它包含一个RunAsync循环和一个OWIN Web API监听器。 是否可以在StatefulServiceinheritance的类和API控制器中添加dependency injection? 我真的只能得到一个或另一个。

如果我将容器逻辑放在Startup.cs中,那么我可以轻松地为Web API控制器获取DI,但不能获得有状态服务。

如果我将容器逻辑放在Program.cs中,那么我可以获得有状态服务而不是web api。 (实际上这感觉更像服务定位器,但在这种情况下我没关系)

Program.cs中

private static void Main() { var builder = new ContainerBuilder(); builder.RegisterModule(); var container = builder.Build(); ILogger logger = container.Resolve(); ServiceRuntime.RegisterServiceAsync("MyService", (context) => new MyService(context, logger)).GetAwaiter().GetResult(); } 

在没有将IContainer传递给StatefulService构造函数的情况下,我不知道如何将其用于Web API的Startup初始化以设置DependencyResolver。

我有一个解决方案,我在通信监听器创建中创建容器。

 protected override IEnumerable CreateServiceInstanceListeners() { return new[] { new ServiceInstanceListener(CreateOwinCommunicationListener, "owin") }; } private ICommunicationListener CreateOwinCommunicationListener(StatelessServiceContext context) { var container = CreateContainer(); return new OwinCommunicationListener("api", new Startup(container), context, Log, "WebServiceEndpoint"); } 

如果我想访问服务中的容器,我也可以这样做。