1

CommonServiceLocatorを使用するようにコードをリファクタリングしようとしています。他のコンポーネントで使用されている共有ライブラリがあります。

私が理解していないのは、これらのコンポーネントはServiceLocator.Currentを呼び出して、それらのタイプを解決することになっているのでしょうか。その場合、ServiceLocator.Currentが実際に設定されていることを確認するにはどうすればよいですか?独自の「MyServiceLocator」を作成して静的コンストラクターを追加する必要がありますか?(それは標準化された抽象化を持つという目的を打ち負かすようです)

または、共有ライブラリに、解決可能なすべてのタイプをパブリックプロパティとして公開し、ServiceLocatorを共有ライブラリの内部に完全に保持するクラスを含める必要がありますか?(これは、抽象化の上に抽象化の上に抽象化があることを意味します)?

重要なのは、コンポーネントはDIを介して作成されておらず、必要なものを取得するためにコンテナを呼び出すことになっているということです。

4

1 に答える 1

3

ServiceLocatorを使用しないでください。代わりに、依存関係のすべてのコンシューマーが、適切な依存関係をそれらに注入できるようにすることで、拡張性に対してオープンになっていることを確認してください。多くの場合、コンストラクタインジェクションが最良のオプションです。

Krzysztof Kozmicは最近、DIコンテナの使用方法の概要を公開しました。彼の例ではCastleWindsorを使用していますが、CommonServiceLocatorだけでなく任意のDIコンテナに外挿することもできます。ただし、これらの原則に従うと、CommonServiceLocatorは冗長になります

于 2010-07-07T02:27:39.007 に答える