AutoMapper のバグか、オーバーライドする必要がある規則に基づく動作のいずれかを見つけました。以下のコードは問題を再現します。FooType
以下のシナリオでAutoMapper がプロパティに書き込もうとしないようにするにはどうすればよいですか?
[Test]
public void FooTypeShouldNotBeAltered()
{
AutoMapper.Mapper.CreateMap(typeof (TypeB), typeof (TypeA))
.ForMember("Foo", opt => opt.MapFrom("Foo"));
var typeA = new TypeA { FooType = "foo" };
var typeB = new TypeB { Foo = "bar" };
AutoMapper.Mapper.Map(typeB, typeA, typeof (TypeB), typeof (TypeA));
Assert.AreEqual("foo", typeA.FooType);
}
public class TypeA
{
public string Foo { get; set; }
public string FooType { get; set; }
}
public class TypeB
{
public string Foo { get; set; }
}
テストの出力は次のとおりです。
Expected string length 3 but was 13. Strings differ at index 0.
Expected: "foo"
But was: "System.String"
-----------^
FooType
(その価値については、AutoMapper がプロパティの値をプロパティの型名に設定していることは明らかです (ただし、このコードによって必ずしも完全に実証されているわけではありません) Foo
。)
今のところ、ジェネリック ベースのオーバーロードやカスタム リゾルバーを使用せずにこの問題が発生しないようにする方法を探していますMap(source, dest, sourceType, destType)
。実際のマッピングを実行するには、オーバーロードを使用する必要があります。