如何在gerneric中使用Automapper CreateMap?

时间:2018-04-23 12:22:37

标签: c# generics automapper value-type

我有一个像这样的通用对象:

public class FieldOfT<TType>
{
    public TType Value { get; set; }
    public bool Foo { get; set; }
    public int Bar { get; set; }
}

我创建了一个自定义自动图类型转换器,如下所示:

public class FieldOfTTypeConverter<TType, TFieldOfTType> : ITypeConverter<TType, TFieldOfTType> where TFieldOfTType: FieldOfT<TType>, new()
{
    public TFieldOfTType Convert(TType source, TFieldOfTType destination, ResolutionContext context)
    {
        if (destination == null)
        {
            destination = new TFieldOfTType();
        }
        destination.Value = source;
        return destination;
    }
}

此时我需要来自所有ValueTypes(bool,char,double等)的映射包含它们的可空类型(bool?,char?,double?等)。

以下代码可以正常使用:

this.CreateMap<bool, FieldOfT<bool>>().ConvertUsing<FieldOfTTypeConverter<bool, FieldOfT<bool>>>();
this.CreateMap<bool?, FieldOfT<bool?>>().ConvertUsing<FieldOfTTypeConverter<bool?, FieldOfT<bool?>>>();

this.CreateMap<double, FieldOfT<double>>().ConvertUsing<FieldOfTTypeConverter<double, FieldOfT<double>>>();
this.CreateMap<double?, FieldOfT<double?>>().ConvertUsing<FieldOfTTypeConverter<double?, FieldOfT<double?>>>();

有更优雅的解决方案吗?像类型列表和循环或通用实现一样?

这是一个粗略的想法:

this.CreateMap(typeof(ValueType),typeof(FieldOfT<>)).ConvertUsing(typeof(FieldOfTTypeConverter<,>));

是否可以使用typeof(?)收集所有值类型?

0 个答案:

没有答案