gpt4 book ai didi

c# - 有状态服务的依赖注入(inject)

转载 作者:行者123 更新时间:2023-11-30 15:21:09 27 4
gpt4 key购买 nike

我有一个 Service Fabric 有状态服务,其中包含一个 RunAsync 循环和一个 OWIN Web API 监听器。是否可以将依赖注入(inject)同时添加到 StatefulService 继承类和 API Controller 中?我真的只能得到一个或另一个。

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

如果我将容器逻辑放在 Program.cs 中,那么我可以为有状态服务获取它,但不能为 Web API 获取它。 (实际上这感觉更像是服务定位器,但在这种情况下我同意)

程序.cs

private static void Main()
{
var builder = new ContainerBuilder();

builder.RegisterModule<MyModule>();

var container = builder.Build();

ILogger logger = container.Resolve<ILogger>();

ServiceRuntime.RegisterServiceAsync("MyService", (context) => new MyService(context, logger)).GetAwaiter().GetResult();
}

如果不将 IContainer 传递给 StatefulService 构造函数,我不知道如何将其传递给 Web API 的启动初始化以设置 DependencyResolver。

最佳答案

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

protected override IEnumerable<ServiceInstanceListener> 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");
}

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

关于c# - 有状态服务的依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38205594/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com