Регистрация зависимостей в контейнере зависимостей, которые нельзя разрезолвить полностью
В общем, есть объекты (контроллеры), которые хочется поместить в контейнер внедрения зависимостей.
Контейнер используется 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) }));
На сколько решение нормальное? Может можно красивее сделать?