0

最近、StructureMap から Ninject に移行しました。Ninject には StructureMap の ObjectFactory (サービス ロケーター) のバージョンがないことに気付くまで、すべては順風満帆でした。

Ninject を含む任意の IOC コンテナーで Service Locator パターンを提供する Common Service Locator を発見しました。私の「スタートアップ」プロジェクト内でうまく機能します-たとえば、WebSite。しかし、Core や Data などのサブプロジェクトから ServiceLocator.Current にアクセスしようとすると、CommonServiceLocator は依存関係のマッピングを認識していないようです。

サブプロジェクトから Common Service Locator を使用するにはどうすればよいですか?

NB パターン/アンチパターンとしての ServiceLocator に関する議論を認識しています。アンチパターンとしての ServiceLocator とアンチパターンとしての Anemic Domain Model の間にはトレードオフがあることを発見しまし

4

2 に答える 2

4

コンテナに直接アクセスする代わりに、ファクトリを使用してください。これにより、アプリケーションが特定のコンテナーから解放され、サービスロケーターが使用されなくなります。

カーネルにアクセスする必要がある唯一の状況は、コンポジションルートにある場合と、オブジェクトの作成を制御できない非常にまれな状況です。このような状況でも、カーネルをシングルトンオブジェクトに割り当てるか、ServiceLocatorを使用してどこからでもアクセスできるようにすることができます。

ServiceLocatorは静的オブジェクトです。したがって、アクセスしている場所との違いはありません。完全に設定される前に、ServiceLocatorにアクセスしていると思います。

于 2012-02-19T18:30:36.367 に答える
0

サービス ロケーターの使用に関する議論に入ることなく、この NuGet パッケージCommonServiceLocator.NinjectAdapterを試しましたか?

私が欲しいと決めたとき、これは私が使ったものです。

于 2012-02-20T14:54:33.273 に答える