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 сопоставит свойство с частным установщиком без проблем. Если вы хотите принудительно инкапсулировать, вам нужно использовать 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
In Silverlight, you cannot use reflection to access private types and members.