2017-06-20 10 views
1

私はオニオンアーキテクチャとASP.NET MVCのウェブサイトを作っていますに依存することができます。私はリポジトリパターンを実装して、私のプロジェクトでControllerメソッドを作成しています。これは私のアーキテクチャです:オニオンアーキテクチャ:UIは、ドメイン

  1. ドメイン:エンティティ/ドメインインタフェース
  2. リポジトリ:MVC
  3. リポジトリを呼び出し、汎用サービス:(今のところ)一般的なリポジトリのEntity Frameworkのコードファースト
  4. サービスを使用して

私のMVCプロジェクトではリポジトリにアクセスする必要がありますが、Jeffrey Palermoによると、MVCはServiceとDomainに依存していますが、リポジトリには何も言われていません。

私はリポジトリの私のUIに依存することはできますか?

サービス作成はリポジトリに依存するため、依存関係がないと何もできません。私はStartup.csを自分のコントローラでリポジトリオブジェクトを直接使用しないように修正しようとしましたが、リポジトリへの参照を追加する必要があることを意味します(http://dotnetliberty.com/index.php/2015/10/15/asp-net-5-mvc6-dependency-injection-in-6-steps/参照)

+1

この時点でMVC(UI)は、DIコンテナに登録するために、すべての層を知っている必要がある組成のルートです。問題を引き起こしていることを示すためのコードをいくつか表示できますか? – Nkosi

+0

@Nkosi ok、だから私はそこにpbsがあると思ったが、私はそうは思わない。どうもありがとう! –

答えて

1

この時点でMVCそれらをDIコンテナに登録するためにすべてのレイヤを知る必要があります。

スタートアップは、実装を直接登録するとき、またはそのレイヤから公開される拡張メソッドを介して間接的に実装を参照するかのいずれかです。いずれにしても、コンポジションルートは、DIコンテナに追加される場合はすべての下位レイヤを参照する必要があります。

コントローラはまた、下層としない結石から抽象に依存しなければなりません。

リポジトリをコントローラに直接注入する場合、責任の混在を示唆するように設計を見直すことをお勧めします。

+0

ありがとう!サービスをインスタンス化するパラメータとしてReposを渡すだけで、コントローラからメソッドにアクセスすることはできません(私のサービスはこれを担当しています)。だから私がスタートアップでこれを行うことができれば、すべてが解決される! –