Я использую Castle Windsor для регистрации ряда интерфейсов, каждый из которых может быть создан с использованием общего заводского метода. т.е.Castle Windsor - Регистрация нескольких интерфейсов с использованием одного и того же заводского метода
container.Register(Component.For(typeof(IFirstService))
.UsingFactoryMethod(k => GetService<IFirstService>())
.LifeStyle.Singleton);
container.Register(Component.For(typeof(ISecondService))
.UsingFactoryMethod(k => GetService<ISecondService>())
.LifeStyle.Singleton);
Вместо добавления регистрационный код для каждого интерфейса, можно использовать метод Types
зарегистрировать их все за один раз (все интерфейсы происходят из IService
) например:
container.Register(Types
.FromThisAssembly()
.Where(t => typeof(IService).IsAssignableFrom(t))
.Configure(c => c.UsingFactoryMethod(k => GetService<?>()));
Спасибо, я догадался, что буду смотреть на отражение. К счастью, мой метод GetService - это всего лишь оболочка вокруг метода на основе объектов, поэтому ваше решение работает для меня. Ключом было найти перегрузку, которая дала бы мне необходимый тип. Я люблю замок Виндзор, но иногда документации немного не хватает! –
Проблема с документацией заключается в том, что каждый использует вещи по-разному, а Windsor имеет так много точек расширяемости. Мы с удовольствием рассмотрим и объединим любые вклады в нашу документацию по GitHub с помощью запроса на перенос. –