Зарегистрируйте IReliableStateManagerReplica, используя Autofac - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть служба фабрики Stateful Service, которая имеет следующий конструктор.

public StatefuleService(StatefulServiceContext context, IReliableStateManagerReplica manager,
IActorProxyFactory actorProxyFactory = null)
            : base(context, manager)
        {
            ActorProxyFactory = actorProxyFactory ?? new ActorProxyFactory();
        }

Я использую Autofac для регистрации компонентов.Как я могу зарегистрировать IReliableStateManagerReplica, используя Autofac?Я попытался

builder.RegisterType<ReliableStateManager>().As<IReliableStateManagerReplica>().SingleInstance;

, но это дает следующее исключение:

Ни один из конструкторов не найден с 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' для типа 'Microsoft.ServiceFabric.Data.ReliableStateManager 'может быть вызван с доступными службами и параметрами: Невозможно разрешить параметр' System.Fabric.StatefulServiceContext serviceContext 'конструктора' Void .ctor (System.Fabric.StatefulServiceContext, Microsoft.ServiceFabric.Data.ReliableStateManagerConfiguration).1010 *

1 Ответ

0 голосов
/ 13 февраля 2019

Целью конструктора StatefulService(StatefulServiceContext, IReliableStateManagerReplica) является инициализация нового экземпляра класса StatefulService с репликой ненадежного надежного менеджера состояний.

Это означает, чточто вы внедрили собственную версию надежного поставщика состояний с пользовательской логикой и не хотите использовать стандартную версию, реализованную Service Fabric.

Если это не так, вам следует использовать конструктор по умолчанию StatefulService(StatefulServiceContext), а если вам нужен доступ к StateManager, вы можете получить к нему доступ из ((StatefulServiceContext)context).StateManager

Еще одна рекомендация, которую я даюВам не следует создавать StatefulService с использованием DI, поскольку StatefulServiceContext создается во время выполнения, и несколько реплик \ разделов могут повторно использовать один и тот же процесс на общем хосте, что означает, что вы можете иметьнесколько StatefulServiceContext и DI не знает, какой из них использовать.

Пожалуйста, посмотрите на этот другой SO: Настройка внедрения зависимостей в Service Fabric с использованием контейнера ASP.NET Core DI по умолчанию

...