Automapper v3에서 작동하지만 아래 버전에서는 더 이상 v5를 사용하지 않습니다. UPDATE v4에서도 작동합니다.Automapper v5 업그레이드 후 빈 속성 값
CallScheduleProfile
은 true
값을 전달하는 클래스의 인스턴스에 Title
속성을 설정합니다. 생성자의
CallScheduleProfileViewModel
는 true
및 "Title"
값을 전달하는 다른 클래스의 인스턴스에 Title
속성을 설정한다.
모든 4 개의 클래스에 대해 AutoMapper에서 매핑을 설정 한 다음 Map을 호출합니다.
결과는 CallScheduleProfileViewModel
의지도 후 Title
속성이 true
의 부울을 가지고 있지만 FriendlyName
는이 생성자에 설정되어 있더라도 비어 있다는 것입니다. 나는 무슨 일이 일어나고 무엇을 믿는
는 CallScheduleProfileViewModel
에 생성자가 호출되고 있으며 FriendlyName
할당지고하지만 매핑이 발생하는 경우가 Entry
의 생성자를 호출하고 존재하는 UxEntry
에 어떤 속성을 매핑하고 할당한다는 것입니다 그 Title
에 속성 및 기본적으로 FriendlyName
은 null이되며 FriendlyName
은 UxEntry
에 없기 때문에 값이 복사되지 않습니다.
나는 그 가정에서 틀릴 수도 있지만 어느 쪽이든 어떻게 FriendlyName
이 매핑에 채워지나요?
업데이트 : 중첩 된 유형의 Automapper documentation을 살펴 봤는데 문제는 문서에도 제공된 코드와 함께 존재합니다. InnerDest
에 문자열 속성을 추가하고 OuterDest
생성자에 해당 값을 설정하면 Map
값이 null입니다. 유형 Entry<T>
에 대한 null
값
B) Automapper는 (후 Entry<T>
의 새로운 인스턴스를 생성이 속성을 설정
A) 생성자) : 때문에
public static void Main(string[] args)
{
Mapper.Initialize(cfg =>
{
cfg.CreateMap<UxEntry<bool>, Entry<bool>>();
cfg.CreateMap<CallScheduleProfile, CallScheduleProfileViewModel>();
});
var old = new CallScheduleProfile();
var newmodel = Mapper.Map<CallScheduleProfile, CallScheduleProfileViewModel>(old);
Console.WriteLine(newmodel.Title.Value);
Console.WriteLine(newmodel.Title.FriendlyName);
}
public class UxEntry<T>
{
public static implicit operator T(UxEntry<T> o)
{
return o.Value;
}
public UxEntry()
{
this.Value = default(T);
}
public UxEntry(T value)
{
this.Value = value;
}
public T Value { get; set; }
}
public class CallScheduleProfile
{
public CallScheduleProfile()
{
this.Title = new UxEntry<bool>(true);
}
public UxEntry<bool> Title { get; set; }
}
public class Entry<T>
{
public Entry()
{
}
public Entry(T value, string friendlyName)
{
this.Value = value;
this.FriendlyName = friendlyName;
}
public T Value { get; set; }
public string FriendlyName { get; set; }
public static implicit operator T(Entry<T> o)
{
return o.Value;
}
}
public class CallScheduleProfileViewModel
{
public CallScheduleProfileViewModel()
{
this.Title = new Entry<bool>(true, "Title");
}
public Entry<bool> Title { get; set; }
}
실제로 발견'CFG : 다른 변경하지 않고 코드를 실행
는출력에 따라 생산하고 있습니다.CreateMap(). ForMember (dest => dest.Title, o => o.UseDestinationValue()); 또한 –
Jon
@Jon 와우, 잘 했어 ... – Fabjan