3

asp.net mvc を使用して新しいアプリケーションを作成しています。依存性注入として munq IOC コンテナーを使用しています。問題は、mvc プロジェクトのすべてのコントローラーとインフラストラクチャ プロジェクトのリポジトリ..依存関係解決プロジェクトを mvc アプリの参照として追加する必要があります。これが出発点です...しかし、問題は、この別のアプリにコントローラーを登録するためです。依存関係解決プロジェクト自体の mvc...しかし、循環参照が発生するため、そのようなことはできません..

この問題を解決するにはどうすればよいですか?または、依存関係の解決を管理する最良の方法は何ですか? Global.asax にすべてを登録したくありません。

4

2 に答える 2

3

Munq.Codeplex.com のソース タブから最新バージョンを入手してください。このバージョンにはビューの改善があり、私が最もよく知っているバージョンであり、私が書きました。

登録のための循環参照を防ぐには、Munq.Interfaces への敬意と、登録するインターフェイスおよび実装を含むクラス プロジェクトを作成します。

IMunqConfig を実装するクラスを作成します。1 つのメソッドvoid RegisterIn(IIocContainer container) があります。このメソッドを実装します。

public class MyRegistration : IMuncConfig
{

    public void RegisterIn(IIocContainer container)
    {

        container.Register<IMyInterface>(c => new MyImplementation());

        //       OR

        container.Register<IMyInterface, MyImplementation>();

       // Repeat as required for each thing to register
    }
}

次に、global.asax で

protected void Application_Start()
{
    IocContainer = new Container();
    Munq.COnfigurationLoader.FindAndRegisterDependencies(container);

    AreaRegistration.RegisterAllAreas();
    RegisterRoutes(RouteTable.Routes);
}

これにより、bin ディレクトリで IMunqConfig を実装するクラスを持つ dll が検索され、それぞれに対して RegisterIn メソッドが実行されます。したがって、登録dllをbinディレクトリにドロップするだけで、登録が自動的に行われます:)

マシュー

于 2010-10-20T17:54:26.440 に答える
0

mvc プロジェクトのすべてのコントローラーとインフラストラクチャ プロジェクトのリポジトリを登録できる依存関係解決用の新しいプロジェクトを作成したいと考えています。

リポジトリと同じプロジェクトに MVC コントローラーを登録しません。MVC アプリは、内部依存関係の登録を含め、その構成を "所有" する必要があります。

インフラストラクチャ プロジェクトの登録は、理想的にはそのプロジェクト内にある必要があります。特に、別の DI コンテナーを使用する他のプロジェクトで利用できるようにするものではない場合はなおさらです。そのプロジェクトが DI にとらわれないままにしておく必要がある場合は、DI 登録を別のプロジェクトに分けることが理にかなっているかもしれません。

しかし、サービス (リポジトリなど) に、コンシューマ (MVC アプリなど) の内部依存関係を登録する責任を負わせることは絶対にしません。

于 2016-08-05T13:48:35.707 に答える