AutoMapper 5.2如何配置
配置AutoMapper以供全局使用的正确方法是什么。
我想将它设置一次,然后在应用程序中使用。
我有一种强烈的感觉,这是错误的。 事实上,我知道这是错误的,因为这会调用一个新实例。 我想要一个全局配置然后你怎么称呼它。 找不到一个好例子!
这就是我所拥有的:但它不是我想要的
public static class AutoMapperConfig { public static IMapper GetMapper() { var config = new MapperConfiguration(cfg => { cfg.CreateMap(); //lots more maps...? }); IMapper mapper = config.CreateMapper(); return mapper; } }
然后用法:
var imapper = AutoMapperConfig.GetMapper(); var dest = imapper.Map(logo);
UPDATE基于:pinkfloydx33
调用一次,然后配置完成。
public static class AutoMapperConfig { public static void RegisterMappings() { AutoMapper.Mapper.Initialize(cfg => { cfg.CreateMap(); /* etc */ }); } }
您可以使用此处概述的静态映射器api。
例如,在应用程序的某个地方,可能在启动期间,您将使用以下内容配置静态(全局)映射器:
AutoMapper.Mapper.Initialize(cfg => { cfg.CreateMap(); /* etc */ });
然后,只要您需要使用“全局”配置的映射器,就可以通过静态Mapper
属性(它是IMapper
)访问它:
Type1 objectOfType1 = new Type1(); var result = AutoMapper.Mapper.Map(objectOfType1);
然后,您可以为应用程序持续时间内提供的所有类型/配置/配置文件配置一个映射器,而无需配置单个映射器实例。
简而言之,您可以配置一次(可能在应用程序启动时)。 然后,静态映射器实例( IMapper
)可通过AutoMapper.Mapper
访问整个应用程序的任何位置。
通过此静态属性访问是您在评论中称为“全局”的内容。 您需要它的任何地方只需使用AutoMapper.Mapper.Map(...)
只要您先调用一次Initialize
。
请注意,如果在静态实例上多次调用Initialize
,则每个后续调用都会覆盖现有配置。
警告在以前的AutoMapper版本中,静态映射器已被删除。 它后来被添加回来,我不知道他们是否保证它将保留在未来的版本中。 建议使用您自己配置的映射器实例。 如果需要,可以将其存储在某个静态属性中。 否则,您可以查看配置文件等,以便轻松配置您的映射器,以便拥有自己的实例不一定是“麻烦”。
以下是在asp.net core mvc中配置automapper的步骤。
1.创建从Profile
扩展的映射配置文件类
public class ClientMappingProfile : Profile { public ClientMappingProfile () { CreateMap().ReverseMap(); } }
2.创建AutoMapper配置类并在此处添加映射配置文件类。
public class AutoMapperConfiguration { public MapperConfiguration Configure() { var config = new MapperConfiguration(cfg => { cfg.AddProfile(); }); return config; } }
3.我们如何使用它。
var config = new AutoMapperConfiguration().Configure(); var iMapper = config.CreateMapper(); var dest = iMapper.Map(logo);
在StartupConfig或StartUp文件中设置它。
public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API configuration and services ..... MappingDTOModelToModel.Configure(); } }
映射的配置,
public static class MappingDTOModelToModel { private static void Configure() { Mapper.Initialize(cfg => { cfg.CreateMap() .ForMember(x => x.ID, m => m.MapFrom(a => a.ID)) .ForMember(x => x.FirstName, m => m.MapFrom(a => a.FirstName)).ReverseMap(); } } }
用方法调用它,
public class MyService { public void MyMethod(var model) { var myModel = Mapper.Map(model); } }
希望这可以帮助,
我们对此问题的解决方案是首先创建一些属性选择,这些属性可以将类装饰为“可映射”(To,From或Both)。 然后,您可以在单个位置初始化AutoMapper,通常在应用程序初始化后使用Reflection为动态创建装饰类的每个实例的映射。
这是一个例子:
上述就是C#学习教程:AutoMapper 5.2如何配置分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
var types = _myTypeFinder.Find(type => type.IsDefined(typeof(AutoMapperAttribute)) || type.IsDefined(typeof(AutoMapperFromAttribute)) || type.IsDefined(typeof(AutoMapperToAttribute)) ); Mapper.Initialize(cfg => { foreach (var type in types) { AutoMapperHelper.CreateMap(type, cfg); } });
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1014778.html