AutoMapper 使用私有设置器映射属性

2024-03-15

是否可以使用 AutoMapper 通过私有设置器分配属性?


AutoMapper 现在允许(我不确定从什么时候开始)使用私有设置器映射属性。它使用反射来创建对象。

示例类:

public class Person
{
    public string Name { get; set; }
    public string Surname { get; set; }
}


public class PersonDto
{
    public string Fullname { get; private set; }
}

和映射:

AutoMapper.Mapper.CreateMap<Person, PersonDto>()
    .ForMember(dest => dest.Fullname, conf => conf.MapFrom(src => src.Name + " " + src.Surname));

var p = new Person()
{
    Name = "John",
    Surname = "Doe"
};

var pDto = AutoMapper.Mapper.Map<PersonDto>(p);

AutoMapper 将毫无问题地使用私有 setter 映射属性。如果想强制封装,需要使用IgnoreAllPropertiesWithAnInaccessibleSetter。使用此选项,所有私有属性(和其他不可访问的属性)将被忽略。

AutoMapper.Mapper.CreateMap<Person, PersonDto>()
    .ForMember(dest => dest.Fullname, conf => conf.MapFrom(src => src.Name + " " + src.Surname))
    .IgnoreAllPropertiesWithAnInaccessibleSetter();

如果您使用 Silverlight,问题就会出现。根据 MSDN:https://msdn.microsoft.com/en-us/library/stfy7tfc(v=VS.95).aspx https://msdn.microsoft.com/en-us/library/stfy7tfc(v=VS.95).aspx

在 Silverlight 中,您无法使用反射来访问私有类型和成员。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AutoMapper 使用私有设置器映射属性 的相关文章

随机推荐