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;
}
}
:-)これはAutoMapperの問題/バグであるならば、あなたはGitHubのサイトでこれを報告することができますか? https://github.com/automapper/automapper/issues –
報告されています! DelegateBasedResolverの独自の実装を挿入する方法があることを期待していましたが、そこにAPIがありますか? – MatteS
なぜそれを交換する必要がありますか? –