我读到了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”。 但为此我必须先知道类型。换句话说,我想调用工厂获取方法并传递“名称”,工厂返回正确的名称。
例如在伪代码中我想要这个
TakeAwayOrderProcessor processor1 = factory.GetMeProcessorCalled("TakeAway")
InLocalOrderProcessor processor2 = factory.GetMeProcessorCalled("InLocal")
我知道我可以将参数传递给构造函数但是我必须“手动”选择它,如果名称是这样返回这个...
温莎可以采用任何方式自动执行此操作,例如StructureMap使用:
ObjectFactory.GetNamedInstance<IOrderProcessor>("InLocal");