0

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

1 回答 1

2

你需要一个TypedFactoryComponentSelector

于 2013-05-31T12:37:39.367 回答