Регистрация зависимостей в контейнере зависимостей, которые нельзя разрезолвить полностью

В общем, есть объекты (контроллеры), которые хочется поместить в контейнер внедрения зависимостей.

Контейнер используется Windsor.

Проблема в том, что некоторые объекты принимают в конструкторе какой-нибудь параметр, который мне неизвестен на момент регистрации я иметь не могу...

И вот в одном из мест, я должен зарезолвить все контроллеры и зарегистрировать в качестве обработчиков.

Мне видится вот такое решение, но не знаю на сколько оно корректное:

1)Создать репозиторий этих контроллеров, который в конструкторе принимает то, что может зарезолвить при регистрации + контейнер в котором зареганы все контроллеры.

2)Под каждый контроллер заводим свой интерфейс, в конструкторах оставляем то, что можно зарезолвить при регистрации, а для всего остального заводим отдельный параметр, который имеет уникальный тип для каждого контроллера и куда придет то, что мы резолвим в Runtime.

3)У репозитория заводим метод IEnumerable Get(BigParamObject params), где в объект параметра кладем все все все, что можем

4)Репозиторий, с помощью какого-нибудь AutoMapper преобразует BigParamObject в конкретные параметры контроллера и делает:

yield return container.Resolve<IController1>(Arguments.FromTyped(new[] { mapper.Map<Param1>(bigParamObject) }));
yield return container.Resolve<IController2>(Arguments.FromTyped(new[] { mapper.Map<Param2>(bigParamObject) }));

На сколько решение нормальное? Может можно красивее сделать?


Ответы (0 шт):