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

コンストラクターにパラメーターを渡すことができることはわかっていますが、名前がこれである場合は「手動で」選択する必要があります。

StructureMapが行うように、Windsorがこれを自動的に行う方法はありますか:

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

1 に答える 1

2

TypedFactoryComponentSelectorが必要です

于 2013-05-31T12:37:39.367 に答える