问题描述
我有一个正在调用另一个服务的服务.两种服务都使用相同的类".这些类的名称相同且具有相同的属性,但具有不同的命名空间,因此我需要使用AutoMapper将一种类型映射到另一种类型.
I have a services that is calling another services. Both of the services are using "the same classes". The classes are named same and have the same properties but has different namespace so I need to use AutoMapper to map from one of the type to the other type.
不,这很简单,因为我要做的只是CreateMap<>
,但是问题是我们大约需要数百个类来手动编写CreateMap<>
,并且可以将其连接到我身上.没有任何自动CreateMap
功能.因此,如果我说CreateMap(),则AutoMapper通过Organization工作并找到所有类,并对这些类及其子类等自动执行CreateMap
No it's pretty simple since all I have to do is the CreateMap<>
, but the problem is that we have around hundreds of classes that I manually needs to write the CreateMap<>
from, and it's works wired to me. Isn't there any Auto CreateMap
function. So if I say CreateMap() then AutoMapper workes thru Organisation and finds all classes and automatically does the CreateMap
for these Classes and it's subclasses etc etc…
希望有一个简单的解决方案,或者我想可以通过一些反射来解决它...
Hope for a simple solution, or I guess some reflection can fix it...
推荐答案
只需在选项中将CreateMissingTypeMaps
设置为true:
Just set CreateMissingTypeMaps
to true in the options:
var dto = Mapper.Map<FooDTO>
(foo, opts => opts.CreateMissingTypeMaps = true);
如果您需要经常使用它,请将lambda存储在委托字段中:
If you need to use it often, store the lambda in a delegate field:
static readonly Action<IMappingOperationOptions> _mapperOptions =
opts => opts.CreateMissingTypeMaps = true;
...
var dto = Mapper.Map<FooDTO>(foo, _mapperOptions);
更新:
UPDATE:
上述方法在AutoMapper的最新版本中不再适用.
The approach described above no longer works in recent versions of AutoMapper.
相反,您应该将CreateMissingTypeMaps
设置为true来创建一个映射器配置,并从该配置创建一个映射器实例:
Instead, you should create a mapper configuration with CreateMissingTypeMaps
set to true and create a mapper instance from this configuration:
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMissingTypeMaps = true;
// other configurations
});
var mapper = config.CreateMapper();
如果您想继续使用旧的静态API(不再推荐),也可以执行以下操作:
If you want to keep using the old static API (no longer recommended), you can also do this:
Mapper.Initialize(cfg =>
{
cfg.CreateMissingTypeMaps = true;
// other configurations
});
这篇关于AutoMapper自动创建createMap的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!