如何解决Castle Windsor Factory的依赖?

时间:2013-05-31 12:08:55

标签: asp.net-mvc-4 dependency-injection castle-windsor factory-pattern

我读到了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");

1 个答案:

答案 0 :(得分:2)