2016-07-26 3 views
-1

우리는 우리가 만들고있는 응용 프로그램을 가지고 있으며 데이터베이스 개체를 뷰 모델 개체로 변환하는 DataTranslationLayer가 있습니다.AutoMapper Initialize

데이터베이스 개체를 웹 프로젝트에 전달하지 않기 때문에 global.asax에서 초기화 할 수 없습니다. 우리는 DataTranslationLayer에서 초기화가 필요합니다.

문제는 클래스를 인스턴스화 할 때 다른 초기화를 수행하고 AutoMapper가 한 번만 초기화되도록 설계되었으므로 문제가 발생한다는 것입니다.

그럼 내 질문은 비슷한 솔루션을 구현 한 사람이 누구이며 무엇을 했습니까?

DTL에서 응용 프로그램 시작시 호출하는 정적 클래스를 만드는 솔루션입니까 아니면 더 멋진 솔루션입니까?

답변

0

정적 자동 매퍼는 단지 얇은 레이어입니다. 각각 다른 구성으로 AutoMapper 인스턴스를 하나 이상 만들 수 있습니다. 이 작업을 수행하는 방법은 my other answer을 참조하십시오.

+0

음, 재미 있습니다. 감사 – griegs

0

웹 프로젝트에 데이터베이스 개체를 전달하지 않는다는 것이 무엇인지 모르겠지만 복잡한 계층화 된 아키텍처가있을 수도 있습니다. 당신은 직접 하나 개의 프로파일을 참조하지 않는

var assembliesToScane = AppDomain.CurrentDomain.GetAssemblies(); 
    var allTypes = assembliesToScan.SelectMany(a => a.ExportedTypes).ToArray(); 

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

    Mapper.Initialize(cfg => 
    { 
     foreach (var profile in profiles) 
     { 
      cfg.AddProfile(profile); 
     } 
    }); 

, 그러나 다만 현재 응용 프로그램 도메인에서 모든 프로필의로드 :이 경우,이 작업을 수행하는 한 가지 방법은 모든 프로파일을로드하는 반사를 사용하는 것입니다.