2009-12-02 7 views
6

内部依存関係注入を使用するのに十分なクラスライブラリ複合体を構築する際には、慎重にすべきことはありますか?内部操作に依存関係注入を使用するクラスライブラリのベストプラクティスは何ですか?

Castle Windsor(例として)を使用すると仮定すると、ライブラリが単純なコンソールアプリケーション(DIなし)で使用されるため、コンテナを構成するのに最適な場所/方法は何ですか?同じコンテナ(Castle Windsor)、および別のコンテナ(NInject)を使用するWebアプリケーション

答えて

6

ここではthe facade patternを使用します:ライブラリでは、コンテナの初期化を行うpublicクラス(単純なInitialize()など)にパブリックメソッドを公開し、ライブラリ内でCastle Windsorを内部的に使用することで、あなたがそれを使用していることを知りません。

+5

+1 OPに記載されている要件を前提とすると、Facadeパターンはうまくフィットします。しかし、DIコンテナを実装の詳細として隠す決定が賢明かどうかという疑問はありますが、私はそれが依存していると思います... –

+0

良いスタートです。ありがとうございます。また、Initialize()を使用して、Castle DictionaryAdapterなどのオブジェクトにパックされている必要な実行時設定値を呼び出しアプリケーションに応じて渡すこともできます。 – alexandrul

+0

ところで、 'Initialize()'メソッドの代わりに、Factoryメソッドなどを強くお勧めします。http://blog.ploeh.dk/2011/05/24/DesignSmellTemporalCoupling –

2

答えがうまくいきませんが、ここに来る人は誰でもthis Q/Aを見てください。それを読んだ後は、using an IoC within a class library smells like a ServiceLocator(アンチパターン)とそのCoupling a library to a container is a smellに同意しなければなりません。

最初は私は良いことをやろうと思っていました。

関連する問題