2

.Netアプリケーションで制御の反転を使用する場合、ホストアプリケーションのデータレイヤーへの参照を追加することは許容されますか?

次の個別のプロジェクトがあるとします。

  • MyApp.Data(EFクラス)
  • MyApp.Business(サービスファクトリ/リポジトリ)
  • MyApp.Services.MyWCFService(ホスト)
  • MyApp.Presentation.MVC(ホスト)
  • MyApp.Business.Tests(ホスト)

この状況では、これまでMyApp.Businessとホストアプリの間でIoCを使用してきました。つまり、各サービスファクトリ/リポジトリのインターフェイスを作成し、ホストアプリケーションでDIを使用していました。次に、各アプリケーションは、私のビジネスファクトリの独自の実装を注入することを選択できます。ホストアプリはビジネスレイヤーのみに依存し、MyApp.Dataアセンブリを参照する必要がないため、これで問題が発生したことはありません(MyApp.Businessは通常、MyApp.Dataアセンブリへのすべての呼び出しを処理します。結果を複合ビジネスオブジェクトにレンダリングします)。

最新のプロジェクトで達成しようとしているのは、すべてのレベルでIoCを使用することです。つまり、MyApp.Dataにインターフェイスを作成して、モックと適切な単体テストをMyApp.Businessに適用できるようにします。これを実現する唯一の方法は、ホストアプリケーションでMyApp.BusinessとMyApp.Dataの両方へのアセンブリ参照を作成し、DIを使用してMyApp.DataとMyApp.Businessの両方の実装を挿入することです。

これは、従来のnTierアプリケーションで教えられてきたすべてのこととは反対ですが、すべての作業を行うのはDIであり、参照は基本的に解決のみを目的としています。これがそれに近づく正しい方法であると私は思いますか?もっと良い方法はありますか?

4

1 に答える 1

3

つまり、はい。アプリケーションのメインエントリポイントからアプリのすべての部分を参照することは許容されます。

この概念は、CompositionRootと呼ばれます。

于 2012-10-09T09:39:58.687 に答える