Я использую расширение NamedScoped Ninject в попытке создать графы объектов, которые создаются каждый раз, когда контейнер создает обработчик команд. Другими словами, мне нужен новый граф объектов для каждой команды, которая может быть обработана соответствующим обработчиком.
Я использовал привязку .DefinesNamedScope("TopLevelOrhcestrator") при регистрации моих "обработчиков команд", поскольку они являются верхним уровнем для обработки команд.
Тип в этой именованной области необходимо внедрить с результатом вызова метода для типа, уже зарегистрированного в этой именованной области. Я подумал, что лучший способ сделать это — использовать нинект-провайдера. Внутри провайдера я пытаюсь разрешить тип в надежде, что смогу вызвать для него метод для передачи в другой объект, который я создаю в этой именованной области. Проблема, с которой я сталкиваюсь, заключается в том, что когда я запрашиваю IContext для экземпляра внутри поставщика клиентов, я получаю исключение, в котором говорится: «Нет подходящих областей действия, и тип объявлен InNamedScope (TopLevelOrchestrator).
context.Kernel.Get<TypeAlreadyRegisteredInScope>().MethodThatGetsAnotherDependency()
Можно ли получить типы из контейнера внутри провайдера Ninject, когда они зарегистрированы внутри именованной области?
ИЗМЕНИТЬ
Прошу прощения, если вариант использования кажется немного странным, я экспериментирую с некоторыми идеями о том, как управлять своими единицами работы и другими службами/менеджерами, которым может понадобиться дескриптор uow для завершения бизнес-варианта использования. Я знаю, что обычно единица работы «запускается», а затем передается во все зависимости, которые могут потребоваться для участия в более крупном процессе. Я подумал, что скорее позволю своему оркестратору взять фабрику единиц работы, чтобы он мог детерминистически уничтожить UOW, и было бы ясно, кто является владельцем варианта использования. То, что будет предоставлено менеджерам/службам, будет прокси для единицы работы, которая будет нулевой, пока оркестратор не запустит реальную единицу работы. Поэтому я и пытался привязать прокси от уже зарегистрированного типа у своего провайдера. На данный момент все это очень экспериментально и проверяло некоторые идеи.
Буду рад услышать любые дальнейшие мысли.