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")
コンストラクターにパラメーターを渡すことができることはわかっていますが、名前がこれである場合は「手動で」選択する必要があります。
StructureMapが行うように、Windsorがこれを自動的に行う方法はありますか:
ObjectFactory.GetNamedInstance<IOrderProcessor>("InLocal");