1

ソリューションのさまざまなレイヤーを別々のプロジェクト(DataAccess、BusinessLogic、ApplicationService、UserInterface(ASP.NET MVC)など)に抽象化し、上位レイヤーからの呼び出しを回避できないように、上位レイヤーが下位1レイヤーのみを参照するように強制した後このアーキテクチャでは、現在のプロジェクトにコンストラクターインジェクション(Unityを使用)を導入しようとしました。

結果に満足しているとは思っていなかったので、もっと良いアプローチがあることを望んでいます。

UIレイヤーのGlobal.asaxでそのように機能することに満足していません。コンテナーを構築するには、すべてのレイヤーからデータアクセスリポジトリに至るまで、すべてのプロジェクトを参照する必要があります。多層設計を簡単に回避できるようになったため、これは間違っていると感じています。

これを回避するためにどのようなアプローチを取りますか?依存性注入用に別のプロジェクトを作成し、そのプロジェクトにすべてを参照させますか?次に、UIレイヤーは依存性注入プロジェクトへの参照のみを必要としますか?

これを達成するためのより良い方法はありますか?

よろしくお願いします!

4

1 に答える 1

1

多層設計を簡単に回避できるようになったので、これはちょうど間違っていると感じます

上手。あなたはいつでもそれを回避することができます。コード(またはコードにアクセスした他のプログラマー)をハックすることもできます。バグを導入することができます。レイヤーをスキップして、UIレイヤーで直接EFを使用できます。

しかし、それは悪い習慣なので、あなたはそうしません。

ただし、リフレクションを使用してこれらの参照をスキップできます(実行時にアセンブリをロードします)。それに関する問題は、他のアセンブリがセットアッププロジェクトに自動的に含まれないこと、またはプロジェクトを公開するときに含まれないことです。

それが問題ではなく、すべてを自動的に実行したい場合:私のコンテナを使用してください。各プロジェクトにコンポジションルートを設定しましょう。次に、UIレイヤーでこれを実行して、他のすべてのアセンブリをロードします。

public void Application_Start(string[] args)
{
    var registrar = new ContainerRegistrar();

    // will load all modules from all assemblies which starts with "MyApp."
    registrar.RegisterModules(Environment.CurrentDirectory, "MyApp.*.dll");

    var container = registrar.Build();
}

より詳細な説明:

http://www.codeproject.com/Articles/440665/Having-fun-with-Griffin-Container

于 2012-08-31T05:44:20.483 に答える