2017-11-13 1 views
0

私は単一のMVCプロジェクトを持つWebソリューションを持っていました。私はコンストラクタインジェクションのためにこのプロジェクトでNinjectバインディングを使用しました。今度は同じソリューションに別のMVCプロジェクトを追加し、この新しいプロジェクトで建設用インジェクションを使用しました。新しいプロジェクトが開始プロジェクトになりました。しかし、プロジェクトが実行されると、 "このオブジェクト用に定義されたパラメータのないコンストラクタはありません"というエラーが発生します。対応するコントローラにパラメータのないコンストラクタを追加すると、このエラーはなくなります。しかし、この時点では、パラメータのないコンストラクタが呼び出されるため、コンストラクタのバインディングは発生しません。私は依存関係を解決するための別のライブラリを作成し、そのDLLをMVCプロジェクトで使用しようとしました。しかし、これは循環依存を作成するため、成功しませんでした。 この状況の解決方法は何ですか?同じソリューションにおける2つのMVCプロジェクトの依存性注入の問題

答えて

0

私はGlobal.asax.csMapperConfig.RegisterMaps();を呼び出すと、以下のようRegisterMaps()方法を定義することで、過去にこれを解決した:

public class MapperConfig 
    { 
    public static void RegisterMaps() 
    { 
     //get all projects' AutoMapper profiles using reflection 
     var assembliesToScan = System.AppDomain.CurrentDomain.GetAssemblies(); 
     var allTypes = assembliesToScan.SelectMany(a => a.ExportedTypes).ToArray(); 

     //depending on your solution, you may need allTypes to be defined as: 
     //var allTypes = assembliesToScan.Where(x => !x.IsDynamic).SelectMany(a => a.ExportedTypes).ToArray(); 

     var profiles = 
      allTypes 
       .Where(t => typeof(Profile).GetTypeInfo().IsAssignableFrom(t.GetTypeInfo())) 
       .Where(t => !t.GetTypeInfo().IsAbstract); 

     //add each profile to our static AutoMapper 
     Mapper.Initialize(cfg => 
     { 
     foreach (var profile in profiles) 
     { 
      cfg.AddProfile(profile); 
     } 
     }); 
    } 
    } 

その後、溶液中の各プロジェクトでは、あなたが別のautomapperプロファイルを持つことができます(Iあなたのオートマトンバインディングは、次のようにすべてのマッピングを1つの巨大なファイルに投げるのではなく、それらを使用するレイヤーで定義されています)

public class AutoMapperServicesConfig : Profile 
    { 
    public AutoMapperServicesConfig() 
    { 
     CreateMap<Entity, EntityViewModel>(); 
    } 

    public override string ProfileName 
    { 
     get { return this.GetType().ToString(); } 
    } 
    } 
関連する問題