我试图将一些我没有编写的代码从AutoMapper 4.0.4升级到7.0.1,但遇到了问题。有一个TypeConverter看起来像这样:
public class BaseListTypeConverter<TCol1, TCol2, T1, T2> : ITypeConverter<TCol1, TCol2>
where TCol1 : ICollection<T1>
where TCol2 : ICollection<T2>
where T1 : class
where T2 : class
{
public TCol2 Convert(ResolutionContext context)
{
var sourceList = (TCol1)context.SourceValue;
TCol2 destinationList = default(TCol2);
if (context.PropertyMap == null
|| context.Parent == null
|| context.Parent.DestinationValue == null)
destinationList = (TCol2)context.DestinationValue;
else
destinationList = (TCol2)context.PropertyMap.DestinationProperty.GetValue(context.Parent.DestinationValue);
...
但是ITypeConverter和ResolutionContext接口现在已更改。 ResolutionContext不再具有SourceValue
,DestinationValue
,PropertyMap
或Parent
属性。我认为,由于Covert
方法的新签名具有用于源对象和目标对象的参数,因此可以省略第一个if
语句,如下所示:
public class BaseListTypeConverter<TCol1, TCol2, T1, T2> : ITypeConverter<TCol1, TCol2>
where TCol1 : ICollection<T1>
where TCol2 : ICollection<T2>
where T1 : class
where T2 : class
{
public TCol2 Convert(TCol1 sourceList, TCol2 destinationList, ResolutionContext context)
{
...
但是参数destinationList
的输入为null,因此显然我仍然需要if
语句正在执行的逻辑,但是如何为AutoMapper 7重写它呢?