2017-04-25 6 views
1

매핑 할 클래스가 있지만 기본 생성자가 없으므로이를 원하지 않습니다. 이것은 기존 개체와 매핑 만하기 때문입니다.유효성 검사 중에 "기본 생성자가 없습니다"라는 AutoMapper가 발생했습니다.

public class Order 
{ 
    public string OrderName { get; set; } 
    public Order(string name) 
    { 
     this.OrderName = name; 
    } 
} 

public class OrderProcessor 
{ 
    private IService service; 
    public string OrderName { get; set; } 

    public OrderProcessor(IService service) 
    { 
     this.service = service; 
     Mapper.Initialize(config => config.CreateMap<Order, OrderProcessor>()); 
    } 

    public void Init() 
    { 
     var order = this.service.GetOrder(); 

     // this works 
     Mapper.Map(order, this); 

     // this fails 
     Mapper.Configuration.AssertConfigurationIsValid(); 
    } 
} 

AutoMapper.AutoMapperConfigurationException : 매핑되지 않은 회원은 발견 했다. 아래 유형 및 회원을 검토하십시오. , 무시, 사용자 정의 매핑 표현을 추가 사용자 지정 해결을 추가하거나 일치하는 생성자를 들어 소스/대상 유형을 수정, 인수 없음의 의 ctor 추가, 선택적 인수를 추가하거나 생성자 매개 변수를 모두지도

Order -> OrderProcessor (대상 멤버 목록)

생성자가 없습니다. 라인

어떻게 구성 어설 션 통과하게하고 실패하는 이유는 새로운 객체를 생성하지 않으려는 경우 : Tests.cs에서 테스트()에서

?

답변

2

내가 최근 6.x의에 Automapper 4.x를 업그레이드 한 후이 문제에 발견 .... 당신이 사용하는 어떤 DI 프레임 워크 사용 WhateverService 해결해야 분명히 있습니다

을 호출하여 대상 유형을 구성하지 않으려면 AutoMapper에 알려야합니다. 방법 문서 당으로

: 현실에서

// Summary: 
    //  Disable constructor validation. During mapping this map is used 
    //  against an existing destination object and never constructed itself. 
    // 
+0

빙고, 이것은 내가 정확히 검색 한 것이다. 테스트를 거쳐 작동합니다. 고맙습니다. –

-1

당신은 ... 당신의 유형은 매개 변수가없는 생성자를 가지고 있지 않는 한 .ConstructUsing()를 사용할 필요가

그래서 같은;

Mapper.Initialize(config => 
    config.CreateMap<Order, OrderProcessor>() 
    .ConstructUsing(x => new OrderProcessor(new WhateverService())); 
); 

당신은

+0

내 OrderProcessor이 몇 더 종속성이 있습니다. 매핑하는 동안 수동으로 해결하는 것은 방법이 아닙니다. 또한, 실제로 OrderProcessor는 재 작성 될 수없는 ViewModel입니다 (샘플은 단순한 버전을 사용했습니다). –

+0

글쎄, 이것은 실제로 '가는 유일한 길'이므로, 행운을 빈다. – Milney

+0

'다시 만들 수 없다'는 것은 무엇을 의미합니까? 안타깝게도이 작업을 수행하거나 Automapper를 사용하지 않아야합니다 ... – Milney