具有 Asp.net 核心依赖注入的 Service Fabric 有状态服务

Service Fabric Stateful Service with Asp.net Core Dependency Injection

我在我的无状态服务中正确使用 Asp.net 核心 DI,因为它基本上是一个带控制器的普通 WebApi 应用程序。

我不知道如何在有状态服务中使用依赖注入。 这是有状态服务的默认构造函数:

 public MyService(StatefulServiceContext context): base(context)
        {            
        }

并在 Program.cs 中被

调用
ServiceRuntime.RegisterServiceAsync("MyStatefulType",context => new MyService(context)).GetAwaiter().GetResult();

我想在有状态服务中使用这样的东西:

  private readonly IHelpers _storageHelpers;
        public MyService(IHelpers storageHelpers)
        {
            _storageHelpers = storageHelpers;
        }

我已经在有状态服务的配置部分注册了它,但是如果我尝试使用上面的代码,我会遇到错误:

StatefulService 不包含采用 0 个参数的构造函数

如何让它发挥作用?

错误与StatefulService 的构造函数有关,它至少需要一个ServiceContext 参数。您的代码仅提供 Storagehelper。

这将是使其工作的最简单方法:

服务:

private readonly IHelpers _storageHelpers;
public MyService(StatefulServiceContext context, IHelpers storageHelpers) 
            : base(context)
{
            _storageHelpers = storageHelpers;
}

程序:

ServiceRuntime.RegisterServiceAsync("MyStatefulType",context => new MyService(context, new StorageHelper())).GetAwaiter().GetResult();

在 'program' 中,您还可以使用 IOC 容器来获取存储助手实例。