编程语言
首页 > 编程语言> > C#-有状态服务的依赖注入

C#-有状态服务的依赖注入

作者:互联网

我有一个Service Fabric状态服务,其中包含RunAsync循环和OWIN Web API侦听器.是否可以在StatefulService继承的类和API控制器中添加依赖项注入?我真的只能得到其中一个.

如果将容器逻辑放在Startup.cs中,则可以轻松获取Web API控制器的DI,但不能获取状态服务.

如果将容器逻辑放在Program.cs中,那么我可以将其用于有状态服务,但不能用于Web api. (实际上,这更像是服务定位器,但在这种情况下,我可以接受)

Program.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");
}

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

标签:dependency-injection,azure-service-fabric,c,autofac
来源: https://codeday.me/bug/20191026/1940068.html