Automapper Project() 到 IEnumerable 和单个对象
Automapper Project() to IEnumerable and single Objects
我有两个 class 将与另一个映射。 MyViewClass
和 MyDomainClass
public class EntityMapProfile : Profile
{
protected override void Configure()
{
Mapper.CreateMap<MyDomainClass, MyViewClass>();
}
}
所以我需要一个扩展方法来将域对象映射到视图对象。
public static class MyClassMapper
{
public static MyViewClass ToView(this MyDomainClass obj)
{
return AutoMapper.Mapper.Map<MyDomainClass, MyViewClass>(obj);
}
public static IEnumerable<MyViewClass> ToView(this IEnumerable<MyDomainClass> obj)
{
return AutoMapper.Mapper.Map<IEnumerable<MyDomainClass>, IEnumerable<MyViewClass>>(obj);
}
}
但我有这么多域和视图 classes。所以我需要创建这么多扩展方法和 classes.
有什么方法可以通用吗?
自动映射器已经在使用泛型,所以我使用直接映射器而不是扩展名没有任何问题,例如
var view = AutoMapper.Mapper.Map<MyDomainClass, MyViewClass>(domain);
但是您可以为 IEnumerable 映射编写扩展:
public static IEnumerable<TView> MapEnumerable<TDomainModel, TView>(this IEnumerable<TDomainModel> domainEnumerable)
where TDomainModel : class
where TView : class
{
return AutoMapper.Mapper.Map<IEnumerable<TDomainModel>, IEnumerable<TView>>(domainEnumerable);
}
并像这样使用它:
IEnumerable<MyViewClass> views = domainEnumerable.MapEnumerable<MyDomainClass, MyViewClass>();
更新:
单域模型的扩展
public static TView MapDomain<TDomainModel, TView>(this TDomainModel domainModel)
where TDomainModel : class
where TView : class
{
return AutoMapper.Mapper.Map<TDomainModel, TView>(domainModel);
}
我有两个 class 将与另一个映射。 MyViewClass
和 MyDomainClass
public class EntityMapProfile : Profile
{
protected override void Configure()
{
Mapper.CreateMap<MyDomainClass, MyViewClass>();
}
}
所以我需要一个扩展方法来将域对象映射到视图对象。
public static class MyClassMapper
{
public static MyViewClass ToView(this MyDomainClass obj)
{
return AutoMapper.Mapper.Map<MyDomainClass, MyViewClass>(obj);
}
public static IEnumerable<MyViewClass> ToView(this IEnumerable<MyDomainClass> obj)
{
return AutoMapper.Mapper.Map<IEnumerable<MyDomainClass>, IEnumerable<MyViewClass>>(obj);
}
}
但我有这么多域和视图 classes。所以我需要创建这么多扩展方法和 classes.
有什么方法可以通用吗?
自动映射器已经在使用泛型,所以我使用直接映射器而不是扩展名没有任何问题,例如
var view = AutoMapper.Mapper.Map<MyDomainClass, MyViewClass>(domain);
但是您可以为 IEnumerable 映射编写扩展:
public static IEnumerable<TView> MapEnumerable<TDomainModel, TView>(this IEnumerable<TDomainModel> domainEnumerable)
where TDomainModel : class
where TView : class
{
return AutoMapper.Mapper.Map<IEnumerable<TDomainModel>, IEnumerable<TView>>(domainEnumerable);
}
并像这样使用它:
IEnumerable<MyViewClass> views = domainEnumerable.MapEnumerable<MyDomainClass, MyViewClass>();
更新: 单域模型的扩展
public static TView MapDomain<TDomainModel, TView>(this TDomainModel domainModel)
where TDomainModel : class
where TView : class
{
return AutoMapper.Mapper.Map<TDomainModel, TView>(domainModel);
}