1

同じインターフェースを実装するコンポーネントがいくつかあり、どのコンポーネントを自分の に注入するかを選択したいと考えていRepositoryます。

 Component.For<IRepository>().ImplementedBy<Repository>().<whatShouldGoHere>()

これで動作していると思っていましたが、文字列などの静的な依存関係がDependsOnあることがわかりました。前進する唯一の方法ですかDependsOnIHandlerSelectorコンポーネントの登録とインラインで宣言したいと思います。たぶんファクトリーメソッド?推奨事項はありますか?

サンプル コンストラクターの編集

public PersitentRepository(Func<ISession,string> sessionFactory)

調べてみると、デリゲートは のアーティファクトであることがわかりましたTypedFactoryFacility。いくつかの変更があったようで、現在はタイプによってのみ解決されます。Castle の古いバージョンでは、文字列引数を使用してコンポーネントを名前で選択していました。

4

2 に答える 2

2

工場はうまくいくでしょう。

FactorySupportFacilityこれを機能させるには、コンテナにを追加する必要があります。

詳細については、http://docs.castleproject.org/Default.aspx?Page=Factory-Support-Facility&NS=Windsor&AspxAutoDetectCookieSupport=1にあるウィンザー城のドキュメントを参照してください。

http://www.mail-archive.com/castle-project-users@googlegroups.com/msg04463.htmlも参照してください。

于 2012-11-05T14:03:23.073 に答える
0

DependsOn は statics 以外にも機能します。問題は、注入されたデリゲートが以前のように解決されないことです。この特定のデリゲートを処理するために独自のコンポーネントを登録することになりました

container.Register(Component.for<Func<ISession,string>>().ImplementedBy(sessionName => container.resolve<ISession>(sessionName));

(記憶で書いたので誤字脱字はご容赦ください)

于 2012-11-07T06:52:45.283 に答える