質問
いくつかのオブジェクトを自動マップしようとしています。
Sourceオブジェクトは、名前、宛先オブジェクトの前に_を持つ性質を持っている - いません。
そのautomapperがプロパティにすべて_propertiesをマップする、1つのマップの作成を実現することが可能である
すべてのソースの種類について。
class MyMapper<TFrom, TTo>{
TTo PerformMap(TFrom fromObject){
Mapper.CreateMap<From, To>(); // ???
TTo result = Mapper.Map<From, To>(fromObject);
//result.Id.ShouldBe(value from TFrom._Id);
return result;
}
}
class From
{
public int _Id { get; set; }
public string _Name { get; set; }
}
class To
{
public int Id { get; set; }
public string Name { get; set; }
}
解決
私はAutoMapperに最近追加された何かがあなたを助けるかもしれない - カスタム命名規則。あなたがトランク(R107)をチェックアウトする場合は、INamingConventionのために見て回ります。今、私は2つの命名規則(PascalCaseとlower_case_underscore)を持っているが、それは本当にあなたが軌道に乗るために右の正規表現を考え出すの問題だ。
今、命名規則は、グローバルおよびプロファイルスコープです。この機能は新しいものであるので、テスト以外のドキュメントはありません。
他のヒント
これは、私はそれをやっている方法です。
Mapper.Initialize(cfg =>
{
cfg.RecognizeDestinationPrefixes(new []{"_"});
cfg.RecognizePrefixes(new[] { "_" });
cfg.CreateMap<To, From>().ReverseMap();
});
は、このためには、この特定のケースを解決するためのカスタムマッピングを追加することができます:
Mapper.CreateMap<From, To>()
.ForMember( dest => dest.Id, opt => opt.MapFrom( src => src._Id ) )
.ForMember( dest => dest.Name, opt => opt.MapFrom( src => src._Name ) );
所属していません StackOverflow