Мой коллега настроил Windsor TypedFactoryFacility в нашем проекте.
Я новичок в Windsor и не понимаю, как он реализует методы интерфейса IServiceFactory, который мы регистрируем как фабрику. Когда я увидел метод Create, который принимает параметр типа T и возвращает T, я подумал, что он, вероятно, вызывает метод Resolve контейнера под прикрытием.
Мне нужна перегрузка Create, которая принимает Type в качестве параметра и возвращает объект. Так как метод Resolve контейнера имеет оба эти вкуса:
T Resolve<T>(string key);
object Resolve(Type service);
Я думал, что добавление перегрузки Create будет работать. Вместо этого он пытается разрешить System.Object вместо типа I, который передается.
Есть ли способ заставить Виндзор реализовать мой метод Create так, как я этого хочу? Я немного поковырялся с отражателем, но не могу понять.
Вот регистрация:
container.AddFacility<TypedFactoryFacility>();
container.Register(
Component.For<IServiceFactory>()
.AsFactory()
.LifeStyle.Transient);
и сам интерфейс:
public interface IServiceFactory
{
//Original Create method that works
T Create<T>();
//The overload that I need that throws an exception
object Create(Type service)
void Release(object service);
}