2012-12-21 1 views
8

첫 번째 예제가 아닌 과수원 모듈 개발에 바쁩니다. 이는 커스텀 (EF) 데이터 액세스가 가능한 소수의 컨트롤러 및 뷰이며 Orchard 컨텐츠 유형 및 부품과 크게 독립적입니다. 일반적으로 Application_Start 핸들러에서 매핑을 설정했지만 Orchard 애플리케이션의 컨텍스트에서이 MVC 모듈의 액션이 호출 될 때 더 이상 해당 엔트리 포인트가 없습니다. 가장 명백하고 즉각적인 해결책은 매핑 초기화를 매핑 된 뷰 모델의 정적 생성자로 이동하는 것입니다.Orchard 모듈에서 AutoMapper 매핑을 어디에서 초기화 할 수 있습니까?

public class ApplicantPersonalDetailsModel : MappedViewModel<Applicant> 
{ 
    static ApplicantPersonalDetailsModel() 
    { 
     Mapper.CreateMap<Applicant, ApplicantPersonalDetailsModel>().Bidirectional(); 
    } 
    .... 
} 

어떻게 그럴 수 있습니까? 일반적으로 MVC3/4에서이를 수행 할 수있는 더 좋은 방법이 있습니까? 아니면 바람직하게는 Orchard 응용 프로그램에서 응용 프로그램 시작시이를 수행 할 수있는 이벤트 나 후크입니까?

답변

3

핸들러는 모듈 내에서 아무 것도 정의하지 않은 경우에도 드라이버없이 핸들러를 사용하여 정의 할 수있는 경우에도 변수를 초기화하는 가장 좋은 장소입니다.

public class InitPartHandler : ContentHandler 
{ 
    public InitPartHandler(IRepository<InitPartRecord> repository) 
    { 
     OnInitializing<InitPart>((context, part) => 
       // do your initialization here 
      ); 
    } 
} 

편집

InitPart and InitPartRecord would be 

public class InitPart : ContentPart<InitPartRecord> 
{ 

} 

public class InitPartRecord : ContentPartRecord 
{ 

} 
+0

'InitPartRecord'는 더미, 즉 빈 클래스 일 수 있습니까? Orchard는 모든 핸들러에서 Init 을 호출합니까? 아니면 다른 코드를 작성하지 않아도 어딘가에 파트를 등록해야합니까? – ProfK

+0

예 .InitPartHandler는 ContentHandler에서 단순히 운전하여 처리기 목록에 등록됩니다. InitPart 및 InitPartRecord는 내가 언급 한 것처럼 더미 클래스입니다. 제 수정 사항. –

6

내가했던 방법이 도움이 IOrchardShellEvents

public class MenuOrchardShellEvents : IOrchardShellEvents 
    { 
     public void Activated() 
     { 
      Mapper.CreateMap<YSRB.Menu.Models.Records.Customer, YSRB.Menu.Models.ViewModels.CustomerViewModel>() 
       .ForMember(c => c.CustomerType, 
        m => m.MapFrom(
         x => (CustomerTypes)x.CustomerType 
        ) 
       ); 
      Mapper.CreateMap<YSRB.Menu.Models.ViewModels.CustomerViewModel, YSRB.Menu.Models.Records.Customer>() 
       .ForMember(c => c.CustomerType, 
        m => m.MapFrom(
         x => (int)x.CustomerType 
        ) 
       ); 
     } 

     public void Terminating() 
     { 
      //Do nothing 
     } 
    } 

희망을 구현하는 것입니다.

+0

어디에 넣어야합니까? 내 모듈 안의 무작위로 명명 된 클래스에서 Orchard는 마술처럼 그것을 발견합니까? – Highmastdon

+0

@Highmastdon 예. 나는 Orchard가 IOrchardShellEvents를 구현하는 모든 클래스를 찾을 것이라고 믿는다. – ysrb

관련 문제