2017-11-13 4 views
0

단일 MVC 프로젝트가 포함 된 웹 솔루션이 있습니다. 나는 생성자 삽입을 위해이 프로젝트에서 Ninject 바인딩을 사용했으며 잘 동작했다. 이제 또 다른 MVC 프로젝트를 같은 솔루션에 추가하고이 새로운 프로젝트에도 건설 인젝션을 사용했습니다. 새로운 프로젝트가 시작 프로젝트가되었습니다. 그러나 프로젝트가 실행되면 "이 객체에 대해 정의 된 매개 변수없는 생성자가 없습니다."라는 오류가 발생합니다. 해당 컨트롤러에 매개 변수없는 생성자를 추가하면이 오류가 사라집니다. 그러나이 시점에서 매개 변수없는 생성자가 호출되면 생성자 바인딩이 발생하지 않습니다. 나는 심지어 의존성 해결을위한 별도의 라이브러리를 만들고 MVC 프로젝트에서 그 DLL을 사용하려고 시도했다. 그러나 이것은 순환 종속성을 만들 것이므로 성공하지 못했습니다. 이 상황에 대한 해결책은 무엇이되어야합니까?동일한 솔루션에서 두 MVC 프로젝트의 종속성 삽입 문제

내가 Global.asax.cs에서 MapperConfig.RegisterMaps();를 호출하고 다음과 같이 RegisterMaps() 방법을 정의하여 과거에이 문제를 해결했습니다

답변

0

: (

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(); } 
    } 
    } 
관련 문제