Вы смотрели на реализацию UnityContainerConfigurator?Даже если вы не хотите использовать Unity, вы можете увидеть, как там обрабатываются средства регистрации типов и адаптироваться к Windsor API.
Как правило, вам не нужно кодировать в необработанный класс ParameterValue и тыкатьчерез лямбда-выражения.На самом деле существует три подкласса:
- ConstantParameterValue
- ContainerResolvedParameter
- ContainerResolvedEnumerableParameter
ConstantParameterValue дает значение непосредственно в качестве значения.имущество.ContainerResolvedParameter используется, когда значение параметра должно быть введено контейнером, а ContainerResolvedEnumerableParameter используется, когда у вас есть коллекция, которую нужно вставить.Каждый экземпляр ParameterValue на самом деле относится к одному из этих типов.
Итак, вы должны попытаться привести к каждому из них, а затем переключиться на основе фактического типа.Есть базовый класс утилит, ParameterValueVisitor, который позволяет вам реализовать шаблон Visitor поверх ParameterValues, чтобы сделать ваш код более чистым.
Итак, что я бы сделал, это отбросил выбор через лямбды - вам не нужно делатьЭто.Реализуйте посетителя для извлечения необходимой вам информации с помощью базового класса, тогда предварительно усвоенная информация будет доступна вам в конкретных классах.Посмотрите на UnityContainerConfigurator для примера того, как это делается.