5

试图自动映射一些对象。
源对象具有名称前带有 _ 的属性,而目标对象则没有。是否可以实现一个映射创建,该自动映射器会将所有 _properties 映射到
所有源类型的属性。

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; }
}
4

3 回答 3

9

我最近添加到 AutoMapper 的内容可能会对您有所帮助 - 自定义命名约定。如果您检查后备箱 (R107),请四处寻找 INamingConvention。现在,我有两个命名约定(PascalCase 和 lower_case_underscore),但实际上只是找出正确的 RegEx 来帮助您:

INamingConvention.cs

现在,命名约定是全局的和配置文件范围的。由于此功能是新功能,因此除了测试之外没有任何文档。

于 2009-08-01T22:25:08.133 回答
2

我就是这样做的

Mapper.Initialize(cfg =>
        {
            cfg.RecognizeDestinationPrefixes(new []{"_"});
            cfg.RecognizePrefixes(new[] { "_" });

            cfg.CreateMap<To, From>().ReverseMap();
        });
于 2017-04-17T17:42:36.950 回答
0

为此,您可以添加自定义映射来解决这种特殊情况:

Mapper.CreateMap<From, To>()
   .ForMember( dest => dest.Id, opt => opt.MapFrom( src => src._Id ) )
   .ForMember( dest => dest.Name, opt => opt.MapFrom( src => src._Name ) );
于 2009-04-27T01:33:39.907 回答