0

最近、StructureMapからNinjectへジャンプしました。 Ninjectには、StructureMapのObjectFactory(サービスロケータ)のバージョンがないことに気づくまで、すべて滑らかなセーリングが行われていました。メインプロジェクト外の共通サービスロケータの使用

Ninjectを含む任意のIOCコンテナでService Locator Patternを提供するCommon Service Locatorを発見しました。私の「スタートアップ」プロジェクトの中ではうまくいきます。 WebSite。しかし、サブプロジェクトからServiceLocator.Currentにアクセスしようとすると、たとえばコアまたはデータCommonServiceLocatorは自分の依存関係のマッピングについて知らないようです。

サブプロジェクトのCommon Service Locatorはどのように使用しますか?

N.B.私はパターン/アンチパターンとしてServiceLocatorに関する議論を認識しています。私はServiceLocatorとアンチパターンとAnemic Domain Modelの間にトレードオフがあることを発見しました。時にはサービスのロケータを使用するのがずっと簡単に&です。

+2

>サービスロケータを使用するほうがずっと簡単でメンテナンスが容易です。 私はその声明にまったく同意するとは言えません... NInjectロケータアダプタの設定方法を示すコードはありますか? –

+0

可能な複製[StructureMapのObjectFactory.GetInstance()メソッドと同等のものを探す](http://stackoverflow.com/questions/1576238/looking-for-ninject-equivalent-of-structuremaps-objectfactory-getinstance-met) –

+0

あなたがアドバイスを無視したいので、何の理由もなくCSLを持って来てください。SLはSLを行う方法を探しているという事実を変えません。私のVTC –

答えて

4

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

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

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

0

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

私が1つを望むと決めたら、これは私が使ったものです。

関連する問題