2009-11-09 12 views
12

NInjectのモジュールアーキテクチャーは役に立つと思われますが、私はそれがちょっと混乱してしまうと心配しています。NInjectモジュールをどのように整理しますか?

モジュールをどのように整理しますか?あなたはどのアセンブリを保持していますか、どのモジュールにどのような配線が入るかをどのように決めますか?

+0

良い質問です。私はあなたの懸念を分かち合いながら、これについてさらに議論したいと思います。サブシステムごとに1つのモジュールを用意するのは合理的ですが、ユニットテストの依存関係を別々に配線するモジュールもあります。 – JulianM

答えて

7

各サブシステムはモジュールを取得します。もちろん、サブシステムとしての分類を保証するものの定義は...

場合によっては、下位レベルのサブシステム/コンポーネントが次の位置にないため、いくつかのバインディングの責任がより高いレベルにプッシュされることがあります。最終的な権威ある決定を下す - 場合によっては、これをモジュールにパラメータを渡すことによって達成することができます。

2

NInjectを使用して数年後に自分の投稿に返信します。ここで

を例としてブックストアを使用して、私は私のNInjectModulesを整理する方法です:

  • BookStoreSolution
    • Domain.csproj
    • Services.csproj
      • CustomerServicesInjectionModule.cs
      • PaymentProcessingInjectionModule.cs
    • DataAccess.csproj
      • CustomerDatabaseInjectionModule.cs
      • BookDatabaseInjectionModule.cs
    • CustomSecurityFramework.csproj
      • CustomSecurityFrameworkInjectionModule.cs
    • PublicWebsite.csproj
      • PublicWebsiteInjectionModule.cs
    • Intranet.csproj
      • IntranetInjectionModule.cs

これが何を言っていることは、システム内の各プロジェクトは、1つまたは複数で予めパッケージ来るということですNそのプロジェクトのクラスのバインディングを設定する方法を知っているモジュールをインジェクトします。

ほとんどの場合、個々のアプリケーションは、プロジェクトによって提供されるデフォルトの注入モジュールに大きな変更を加えたくないでしょう。たとえば、DataAccessプロジェクトをインポートする必要のある小さなWinFormアプリケーションを作成する場合は、通常、プロジェクトのRepository <>クラスを関連するIRepository <>インターフェイスにバインドする必要があります。

同時に、個々のアプリケーションに特定の注入モジュールを使用させることはありません。アプリケーションは、独自のインジェクションモジュールを作成し、インポートしているプロジェクトが提供するデフォルトモジュールを無視することができます。このようにして、システムは依然としてフレキシブルかつ分離されたままである。

+0

これは、モジュールを持つプロジェクトのそれぞれにNinjectパッケージ/リファレンスを含める必要があることを意味しますか?呼び出し元のアセンブリ(Webプロジェクトなど)に必要なすべてのサービスを登録する場所を1つしか持たず、そのアセンブリのみがNinjectを直接参照することを望みます。思考? –

+0

これは、この設定の欠点です。ただし、プロパティインジェクションを使用しないか、Kernel.Get <>()を使用しない非常に純粋なアプリケーションを使用しない限り、通常はNInjectリファレンスを使用します。 – cbp

+0

うーん...私はDIのためにUnityを使ったプロジェクトを終えたばかりで、私はウェブプロジェクト内のブートストラップで1つの長いRegisterServicesメソッドで終わった。私のクラスlibsプロジェクトにUnityやEntLibに直接依存するものはありませんでした。彼らはすべてコンストラクタインジェクションを利用しました。私はそれがむしろいいと思った。 –

関連する問題