작동이
Mapper.CreateMap<OpenName, RestrictedName>()
.ConstructUsing(s => new RestrictedName(s.Name));
같은 ConstructUsing을 사용할 수 있습니다 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.
사용하는 Automapper의 버전은 무엇? 그 일을 해봤습니까? – PatrickSteele
@blockhead 사실 그것은 매우 중요한 질문입니다. 불변의 객체는 자유롭게 변경할 수있는 객체보다 훨씬 더 나은 아키텍처입니다 (자신의 세터를 공개적으로 노출시킴으로써). 이것은 Entity Framework가 최근 사유 재산으로 수화하여 도메인 모델이 초기 수화 후에 불변으로 유지 될 수 있도록하는 기능을 추가 한 정확한 이유입니다. 아마도 자신의 건축물을 닦을 필요가있는 것은 레오 실라가 아닙니다. ;) – Marchy
실례 합니다만? 사유 재산은 사적이어야합니다. 그것은 객체에 속한 데이터이고, 객체 만 알고 있고 그 데이터에 대해 알아야합니다. – blockhead