Я хочу, чтобы иметь возможность создать экземпляр компонента из контейнера windsor для типа, описанного экземпляром System.Type.Как я могу решить из System.Type без ссылки на контейнер
Я понимаю, что я могу сделать что-то вроде:
public object Create(Type type)
{
return globalContainer.Resolve(type);
}
Но я хочу, чтобы иметь возможность сделать это без отсылая к контейнеру. Мне было интересно, можно ли это сделать, используя типичный завод? Что-то вроде
public interface IObjFactory
{
object Create(Type type);
}
public class Installer: IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.AddFacility<TypedFactoryFacility>();
container.Register(Component.For<IObjFactory>().AsFactory());
}
}
public class Something
{
private readonly IObjFactory objFactory;
public Something(IObjFactory objFactory)
{
this.objFactory = objFactory;
}
public void Execute(Type type)
{
var instance = objFactory.Create(type);
// do stuff with instance
}
}
Почему бы не дать методу параметр типа и вернуть этот тип, а не объект? – Magus
Magnus - я имею дело с сторонним API, и все, что они передают мне, - это System.Type для разрешения. –
RochardNoogle - я думаю, что до тех пор, пока вы уже прошли контейнер для создания класса с помощью метода create, ваш первый пример в порядке. Это просто, и в будущем, если это необходимо, не представляется сложным заменить. – Magus