Служба Service Fabric с отслеживанием состояния с внедрением зависимостей ядра Asp.net

Я правильно использую DI ядра Asp.net в своей службе без сохранения состояния, поскольку в основном это обычное приложение 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;
        }

Я уже зарегистрировал его в разделе Configuration службы Stateful, но если я попытаюсь использовать приведенный выше код, у меня появится ошибка:

StatefulService не содержит конструктора, который принимает 0 аргументов

Как заставить работать?


person Francesco Cristallo    schedule 04.12.2016    source источник


Ответы (1)


Ошибка касается конструктора 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();

В «программе» вы также можете использовать контейнер IOC для получения вспомогательного экземпляра хранилища.

person LoekD    schedule 05.12.2016
comment
Если бы у него была инъекция для IStorageHelper, как бы он начал использовать экземпляр службы вместо создания StorageHelper? - person jKlaus; 08.03.2017