0

私は、.NET Web APIアプリケーションでDependency Injectionを実装するために単一性を使用しています。 はここUnityの名前による依存関係の登録方法

public static class WebApiConfig 
    { 
     public static void Register(HttpConfiguration config) 
     { 

      var container = new UnityContainer(); 
      AppDependancyRegistry.Register(container); 
      config.DependencyResolver = new UnityResolver(container); 

     } 
    } 

そして、ここでは、私は一般的なRepositoresマッピングされている私のAppDependancyRegistryクラス

public static class AppDependancyRegistry 
     { 
      public static void Register(UnityContainer container) 
      { 
        container.RegisterType(typeof(IBaseRepository<>), typeof(BaseRepository<>)); 
        //container.RegisterTypes(AllClasses.FromLoadedAssemblies(), WithMappings.FromMatchingInterface, WithName.Default); 

      } 
     } 

ですが、私はそのインターフェイスにマネージャークラスを登録して取得couldntの私のWebApiCongigのrelevent一部です。私はマネージャークラスのすべてを手動でマッピングしたくありません。

私はすべての研究からやった部分をコメントしました。私はちょうど確認したい、これは

私のマネージャークラスのもののいくつかのより多くを行うことなく、私は私のアプリを実行し得るカントとして、私は今それを行う方法です:インターフェイスは、アドバンス

DutyManager: IDutyManager 
UserDetailManager:IUserDetailManager 

などのおかげのように見えます

+0

のようにマップする慣例により、ここで

container.RegisterTypes(AllClasses.FromLoadedAssemblies(), WithMappings.FromMatchingInterface, WithName.Default); 

を使用してインタフェースをrespeciveするすべてのクラスをマッピングすることができます- 何故なの? –

+0

もっと仕事が悪いです。私のコンセプトです。一度良いことを学ぶ –

+0

1つのインターフェイスのすべての実装を一括登録することはできますが、複数のインターフェイスは一切登録することはできません。少なくとも城では、ninject、structuremap、およびtinyioc。私は統一を使用していない。 –

答えて

0

このqnの解が見つかりました。ユニティを使用して、我々は直接ユニティマップは*私はManauallyマネージャークラスの一人一人をマッピングしたいいけない*彼らはこの

DutyManager: IDutyManager 
UserDetailManager:IUserDetailManager 
1

それぞれを登録する必要があります。しかし、手動で行う必要がない場合は、「基本的に」できることは、リフレクションによってアセンブリをロードし、すべてのインターフェイスで繰り返し、そのインターフェイスを実装するクラスの数を確認しますそのクラスへのインタフェースを無名登録として登録します。

なぜ名前が付けられていないのですか?あなたが実際に登録や、ResolvedParameterコンストラクタで名前を使用しない限り、名前付き登録は役に立たず、登録を「手作り」しているわけではないので、あなたはそれらをおそらく参照しません。

あなたのケースでは、インターフェイスとクラスがジェネリックであるため、ParameterTypeもチェックする必要があります。

関連する問題