0

我讀過CastleWindsor的工廠,但我不清楚。希望任何人都可以幫助我。 我在MVC4項目中擁有這種類型的工廠。如何解決溫莎城堡工廠的依賴問題?

public interface IOrderProcessorFactory 
{ 
    T Create<T>(string ProcessorName) where T : IOrderProcessor; 

    void Release(object service); 

    IOrderProcessor GetTakeAway(); 
    IOrderProcessor GetInLocal(); 

} 

這是註冊是這樣的:如果一個MVC控制器內我給工廠以這種方式

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")); 

_orderProcessorFactory.GetTakeAway(); 

我得到正確的一個,名爲「TakeAway」。 但爲此,我不得不知道類型。換句話說,我想調用工廠get方法並傳遞一個「名稱」,工廠返回正確的一個。

例如,在僞代碼,我想這

TakeAwayOrderProcessor processor1 = factory.GetMeProcessorCalled("TakeAway") 
InLocalOrderProcessor processor2 = factory.GetMeProcessorCalled("InLocal") 

我知道我可以傳遞參數的構造函數,但隨後我將不得不爲「手動」選擇與如果名稱是這回這個人。 ..

有什麼辦法溫莎能做到這一點自動,像StructureMap做:

ObjectFactory.GetNamedInstance<IOrderProcessor>("InLocal"); 

回答