2011-09-07 7 views
1

이것은 의도적으로 설계된 것일 수 있지만 처음에는 automapper가 모든 NullReferenceExceptions를 캐치하고 무시할 것으로 기대하지 않았습니다. 우리는 주로 MapFrom을 사용하고 때로는 복잡한 표현식을 만듭니다. 어떤 예외 (심지어 NullReferenceException)가 있어도 이러한 매핑이 실패하기를 원하지만 AutoMapper가이를 수행 할 수는 없습니다. automapper가 모든 경우에 대해 사용자 정의 값 해결 프로그램을 작성하지 않고 이러한 예외를 모두 무시하지 못하게 할 방법이 있습니까? 이것은 우리에게 많은 여분의 코드를 의미 할 것이고, 사실은 처음에는 자동 매퍼를 사용하지 않으면 코드가 적을 것입니다.AutoMapper는 NullReferenceException을 캐치하고 무시합니다.

[TestFixture] 
public class Tests 
{ 
    [SetUp] 
    public void Setup() { Mapper.Reset(); } 

    [Test] 
    public void ShouldThrowMappingExceptionUsingMapFromExpression() 
    { 
     Mapper.CreateMap<Source, Destination>() 
      .ForMember(d => d.DestinationMember, o => o.MapFrom(s => s.SourceMember.SourceProperty)) 
      ; 

     Assert.Throws<AutoMapperMappingException>(() => Mapper.Map<Source, Destination>(new Source())); 
    } 

    [Test] 
    public void ShouldThrowMappingExceptionUsingResolveUsingExpression() 
    { 
     Mapper.CreateMap<Source, Destination>() 
      .ForMember(d => d.DestinationMember, o => o.ResolveUsing(s => s.SourceMember.SourceProperty)) 
      ; 

     Assert.Throws<AutoMapperMappingException>(() => Mapper.Map<Source, Destination>(new Source())); 
    } 

    [Test] 
    public void ShouldThrowMappingExceptionUsingResolverInstance() 
    { 
     Mapper.CreateMap<Source, Destination>() 
      .ForMember(d => d.DestinationMember, o => o.ResolveUsing(new TestValueResolver()).FromMember(s => s.SourceMember)) 
      ; 

     Assert.Throws<AutoMapperMappingException>(() => Mapper.Map<Source, Destination>(new Source())); 
    } 

    [Test] 
    public void ShouldThrowMappingExceptionUsingResolverType() 
    { 
     Mapper.CreateMap<Source, Destination>() 
      .ForMember(d => d.DestinationMember, o => o.ResolveUsing<TestValueResolver>().FromMember(s => s.SourceMember)) 
      ; 

     Assert.Throws<AutoMapperMappingException>(() => Mapper.Map<Source, Destination>(new Source())); 
    } 

} 

public class Destination 
{ 
    public string DestinationMember { get; set; } 
} 

public class Source 
{ 
    public SourceChild SourceMember { get; set; } 
} 

public class SourceChild 
{ 
    public string SourceProperty { get; set; } 
} 

public class TestValueResolver : ValueResolver<SourceChild, string> 
{ 
    protected override string ResolveCore(SourceChild source) 
    { 
     return source.SourceProperty; 
    } 
} 
+0

,이는 Github에서 사이트에 대해보고 할 수 있습니다? https://github.com/automapper/automapper/issues –

+0

신고 됨! 내 자신의 DelegateBasedResolver 구현을 삽입하는 방법이있을 것으로 기대했는데, 거기에 API가 있습니까? – MatteS

+0

왜 대체해야합니까? –

답변

관련 문제