业无高卑志当坚,男儿有求安得闲?这篇文章主要讲述在Mapping时向Automapper提供构造函数参数相关的知识,希望能为你提供帮助。
我有一组我想用Automapper映射的类。但是,每个类都有一个构造函数参数。这个参数对于所有成员都是相同的类型,但是在我想要进行映射之前,我不知道要提供的值。
【在Mapping时向Automapper提供构造函数参数】我找到了ConstructUsing
方法,但这需要我在配置时指定参数值。我宁愿在映射时执行此操作,以避免需要为参数的每个实例创建单独的MappingEngine
。我发现Map
重载映射到已经创建的目标对象。这很有用,但它不适用于列表或对象图。
基本上,我正在寻找类似Autofac的解析方法,仅适用于Automapper的Map
方法。
Resolve<
IFoo>
( new TypedParameter( typeof( IService ), m_service) );
答案通过Automapper源代码阅读,我找到了一个可行的解决方案,我将在下面介绍。
首先,您需要指定要使用服务定位器进行构建。
IConfiguration configuration = ...;
configuration.CreateMap<
Data.Entity.Address, Address>
().ConstructUsingServiceLocator();
然后在调用map时,使用
opts
参数指定特定的服务定位器// Use DI container or manually construct function
// that provides construction using the parameter value specified in question.
//
// This implementation is somewhat Primitive,
// but will work if parameter specified is always the only parameter
Func<
Type, object>
constructingFunction =
type =>
return Activator.CreateInstance( type, new object[] { s_service } );
mappingEngine.Map<
Data.Entity.Address, Address>
(
source, opts: options =>
options.ConstructServicesUsing( constructingFunction );
由
constructingFunction
指出的“ServiceLocator”优先于提供给IConfiguration.ConstructServicesUsing(...)
的功能推荐阅读
- 如何在Ninject中使用AutoMApper.5.2.0()
- 如何将Applescript scpt文件转换为命令
- .Net Core App - 命令行格式异常
- 在Android中登录尝试失败时app崩溃了
- 在Android studio中使用活动模板时,我无法添加新的Java类吗()
- Android SQLite用户登录不起作用
- 无法使用react-native app中的redux-persist检查索引/主文件上是否已加载持久状态
- 将外部JAR添加到Android AOSP构建时出错
- Android自定义下拉菜单/弹出菜单