私は、ASP.NET の仕事に応募した PHP プログラマーです。彼らは、多層アーキテクチャを実装する (私が選んだ) アプリケーションを作成するという課題を私に与えました。
私は多くのジレマを持っています。私が理解しているように、多層は普遍的な形を持たない概念であり、誰もが自分にとって何が最善かを決定する必要があります. しかし、彼らは、プレゼンテーション レイヤーがデータ アクセス レイヤーへの参照を持つべきではないとアドバイスしてくれました。これは理にかなっています。しかし...
Add new project
プレゼンテーション層である (コントローラーとビューを持つ)新しいプロジェクトを作成しました。現在、プレゼンテーション層には、class library
Ninject を使用してアプリケーション全体の依存関係を注入する というもありますNinjectIoC
。NinjectIoC は、引数としてコントローラーに依存関係を直接挿入するために、プレゼンテーション層プロジェクトへの参照を持っている必要があります。また、他のすべてのレイヤー (DataAcessLayer、BusinessLayer など) を依存関係にバインドするために、それらへの参照も必要です。
主な問題は、プレゼンテーション レイヤー プロジェクトが NinjectIoC への参照も持つ必要があり、Global.asax 内に StandardKernel を作成する必要があることです。これにより、循環的な依存関係が作成され、許可されません。
唯一の解決策は、すべてのレイヤー (DataAccessLayer を含む) のプレゼンテーション レイヤー プロジェクトへの参照を追加することです。これは、私が理解しているように、悪いことです。しかし、それがすべてのレイヤーのすべてのインターフェイスをバインドし、Global.asax 内で実行する唯一の方法です。
私は間違って考えていますか?
編集:
NinjectIoC
Ninject がインストールされており、アプリケーション全体でそれらをバインドするためにすべてのレイヤーへの参照があります。Global.asax で呼び出すには、UI への参照が必要です。
UI はNinjectIoC
、コントローラーのバインドのために Global.asax で呼び出すことができるように、への参照を持っている必要があります。
NinjectIoC への参照を持つ中間クラス ライブラリを作成しようとしました。そのライブラリは UI で参照されます。問題は、コントローラーをバインドするために NinjectIoC が UI の参照を持たなければならないため、循環依存関係も作成されることです。