1

私は、私のドメインリポジトリサービスのために私の依存性注入コンテナを設定するためのコードがどこにあるのか把握しようとしています。DDDのドメインインフラストラクチャサービス用にDIコンテナを設定する必要はありますか?

私の最初の考えは、クライアントがすべてのサービスを設定できるようにすることでしたが、クライアントは、クライアントで公開したくないリポジトリサービスを認識する必要があります。

私は各レイヤーが公開された構成方法またはクラスを介して独自のサービス依存関係を構成できると考えていましたか?

+1

私は常にアプリケーションレイヤーの上にすべてのDI構成を持つ特定のレイヤーを作成します。 私はすべてのUI(rest、cli、soapなど)がDI設定を階層化するために自分自身を繰り返す必要はありません。 六角形アーキテクチャを使用している場合は、インフラストラクチャレイヤ内に存在する必要があります。 – Dariss

+1

"ドメインリポジトリ*サービス*"? ... – guillaume31

+4

通常、アプリケーションのエントリポイントにすべてのDIを設定する必要があります。http://blog.ploeh.dk/2011/07/28/CompositionRoot/ – guillaume31

答えて

4

私の最初に考えたのは、クライアントはすべてのサービスを設定できるようにしたが、 その後、クライアントは、私がクライアントに公開したくない リポジトリサービス、に注意する必要があります。

私がする傾向があるのは、私のWebプロジェクトがIoCの配線が始まる最初の場所になるComposition Rootパターンです(つまり、一般的な種類のサードパーティ製ライブラリがコントローラ工場)。しかし、私はIoCモジュールを参照してIoCバインディングの残りの部分を設定します(私の場合、通常はNinjectを使用していますので、WebプロジェクトからNinjectModuleを参照しています)。しかし、私はこれを別のインフラストラクチャプロジェクトに入れます。NinjectModule

このIoCインフラストラクチャプロジェクトをWebプロジェクトから参照できます.IoCプロジェクトは、ソリューション内の他のすべてのプロジェクトを参照できます。

このようにして、自分のWebプロジェクトにアクセスするために、私のリポジトリのレイヤーのように、私のWebプロジェクトにプロジェクト参照を作成する必要はありません。

2

答えは既にコメントで与えられていますが、私はここで適切な答えをまとめています。

プラグインアーキテクチャのような専用アーキテクチャを使用しない限り、は常にDIコンテナをアプリケーションのエントリポイントの近くの1か所に設定する必要があります。これは合成ルートと呼ばれます。

構成タイプがリポジトリ、ファクトリ、ドメインサービスまたはアプリケーションサービスであるかどうかは関係ありません。すべてのDI構成はのいずれかにしてください場所。

組成ルートの詳細については、this blog postを参照してください。

+0

コンポジションルートで利用できない(アクセス修飾子によって隠されている)依存関係を設定する必要がある場合、どのように動作しますか? – drizzie

+1

*構成ルートから*それを隠す*ではありません。アクセス修飾子(好ましい)を介してアクセス可能にするか、.NETでInternalsVisibleToのようなメカニズムを使用してください(これに対しては推奨しますが、そのオプション)。 – theDmi

関連する問題