我读到了 CastleWindsor 的工厂,但我不清楚。希望有人可以帮助我。我在 MVC4 项目中有这个类型的工厂。
public interface IOrderProcessorFactory
{
T Create<T>(string ProcessorName) where T : IOrderProcessor;
void Release(object service);
IOrderProcessor GetTakeAway();
IOrderProcessor GetInLocal();
}
这是这样注册的:
container.Register(Component.For<IOrderProcessorFactory>).AsFactory();
container.Register(Component.For<IOrderProcessor>).ImplementedBy<TakeAwayOrderProcessor>().LifestylePerWebRequest().Named("TakeAway"));
container.Register(Component.For<IOrderProcessor>().ImplementedBy<InLocalOrderProcessor>().LifestylePerWebRequest().Named("InLocal"));
如果在 MVC 控制器中,我以这种方式调用工厂。
_orderProcessorFactory.GetTakeAway();
我得到了正确的一个,名为“TakeAway”的那个。但为此我必须事先知道类型。换句话说,我想调用工厂 get 方法并传递一个“名称”,工厂返回正确的。
例如在伪代码中我想要这个
TakeAwayOrderProcessor processor1 = factory.GetMeProcessorCalled("TakeAway")
InLocalOrderProcessor processor2 = factory.GetMeProcessorCalled("InLocal")
我知道我可以将参数传递给构造函数,但是我将不得不“手动”选择它,如果 name is this return this one else ...
Windsor 有什么方法可以自动执行此操作,就像 StructureMap 一样:
ObjectFactory.GetNamedInstance<IOrderProcessor>("InLocal");