重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本篇内容主要讲解“如何使用对象到对象映射AutoMapper”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用对象到对象映射AutoMapper”吧!
成都创新互联主要从事成都网站建设、网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务庆城,10余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220
入门
AutoMapper支持使用静态服务位置构造“自定义值解析器”,“自定义类型转换器”和“值转换器”的功能:
var configuration = new MapperConfiguration(cfg => { cfg.ConstructServicesUsing(ObjectFactory.GetInstance); cfg.CreateMap
或动态服务位置,用于基于实例的容器(包括子容器/嵌套容器):
var mapper = new Mapper(configuration, childContainer.GetInstance); var dest = mapper.Map
您可以使用配置文件定义配置。然后,通过在启动时调用IServiceCollection扩展方法AddAutoMapper,使AutoMapper知道这些概要文件在哪些程序集中定义:
services.AddAutoMapper(profileAssembly1, profileAssembly2 /*, ...*/);
或标记类型:
services.AddAutoMapper(typeof(ProfileTypeFromAssembly1), typeof(ProfileTypeFromAssembly2) /*, ...*/);
现在,您可以在运行时将AutoMapper注入服务/控制器中:
public class EmployeesController { private readonly IMapper _mapper; public EmployeesController(IMapper mapper) => _mapper = mapper; // use _mapper.Map or _mapper.ProjectTo }
当然还有很多可扩展性,比如:
定制类型转换器
有时,您需要完全控制从一种类型到另一种类型的转换。通常,这是当一种类型看起来与另一种类型不一样时,已经存在转换函数,并且您希望从“松散”类型变为更强的类型,例如字符串的源类型到Int32的目标类型。
例如,假设我们的源类型为:
public class Source { public string Value1 { get; set; } public string Value2 { get; set; } public string Value3 { get; set; } }
但您想将其映射到:
public class Destination { public int Value1 { get; set; } public DateTime Value2 { get; set; } public Type Value3 { get; set; } }
如果我们尝试按原样映射这两种类型,则AutoMapper会抛出异常(在映射时和配置检查时),因为AutoMapper不知道从字符串到int,DateTime或Type的任何映射。要为这些类型创建映射,我们必须提供一个自定义类型转换器,并且我们可以通过三种方式:
void ConvertUsing(FuncmappingFunction); void ConvertUsing(ITypeConverter converter); void ConvertUsing () where TTypeConverter : ITypeConverter ;
第一个选项就是任何带有源并返回目的地的函数(也有多个重载)。这适用于简单的情况,但对于较大的情况则显得笨拙。在更困难的情况下,我们可以创建一个自定义的ITypeConverter
public interface ITypeConverter{ TDestination Convert(TSource source, TDestination destination, ResolutionContext context); }
并向AutoMapper提供一个自定义类型转换器的实例,或者为类型提供AutoMapper将在运行时实例化的类型。我们上面的源/目标类型的映射配置将变为:
public void Example() { var configuration = new MapperConfiguration(cfg => { cfg.CreateMap().ConvertUsing(s => Convert.ToInt32(s)); cfg.CreateMap ().ConvertUsing(new DateTimeTypeConverter()); cfg.CreateMap ().ConvertUsing (); cfg.CreateMap
在第一个映射中,从字符串到Int32,我们仅使用内置的Convert.ToInt32函数(作为方法组提供)。接下来的两个使用自定义ITypeConverter实现。
自定义类型转换器的真正强大之处在于,只要AutoMapper在任何映射类型上找到源/目标对,它们就可以使用。我们可以构建一组自定义类型转换器,并在其上使用其他映射配置,而无需任何其他配置。在上面的示例中,我们不必再次指定string / int转换。由于必须在类型成员级别配置自定义值解析器,因此自定义类型转换器的作用域是全局的。
当然还有很多功能需要去实际项目中实现。
到此,相信大家对“如何使用对象到对象映射AutoMapper”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!