Я являюсь частью команды, создающей "своего рода" платформу, основанную на сообщениях, где люди могут регистрировать свои обработчики сообщений с зависимостями, которые они имеют для своих обработчиков.
Рабочий, получит сообщения и вызовет соответствующие обработчики. Поскольку у обработчиков есть зависимости, мы передаем реализацию IDependecyResolver через рабочий конструктор. Worker использует эту абстракцию для создания этих обработчиков.
Пользователи нашей инфраструктуры могут использовать любой DI-контейнер, который им нравится, поэтому все, что им нужно сделать, - это реализовать определенные интерфейсы, обеспечивающие абстракцию для своего любимого DI-контейнера. Моя работа состоит в том, чтобы предоставить реализацию SimpleInjector, поэтому для нашей среды SimpleInjector поддерживается сразу после установки.
Проблема, с которой я сталкиваюсь, заключается в том, что, хотя я регистрирую SimpleInjectorDependencyResolver в контейнере, контейнер не может разрешить реализацию IDependencyResolver во время выполнения, и я получаю это.
Это исключение, которое я получаю.
ActivationException: конструктор типа ReactiveWorker содержит параметр с именем 'map' и типом IMessageHandlerMap , который не зарегистрирован. , Убедитесь, что IMessageHandlerMap зарегистрирован, или измените конструктор ReactiveWorker .
Вот мой код для регистрации:
registrant.Register<IDependencyResolver>(LifeSpan.Scoped);
registrant.Register<IMessageHandlerMap<TChildModule>>(t0, LifeSpan.Scoped);
работник нуждается в обоих, карта обработчика сообщений и средство разрешения зависимостей.
Это мой класс с параметризованными конструкторами:
public sealed class ReactiveWorker<TOwnerModule>: IWorker
{
readonly IMessageHandlerMap<TOwnerModule> _map;
readonly IDependencyResolver _resolver;
public ReactiveWorker(IMessageHandlerMap<TOwnerModule> map, IDependencyResolver resolver)
{
_map = map;
_resolver = resolver;
}
}
Я надеюсь, что каждый сможет понять сценарий.