AutoMapper的rerefence文档在哪里?

时间:2013-12-12 08:34:36

标签: c# documentation automapper

我在寻找AutoMapper for C#的文档。我发现的唯一的事情是this wiki,但这是不完整的,而不是实际的每个功能文档。很难找到特定功能的文档。

具体来说,我会搜索DynamicMap(sourceValue, sourceType, destinationType)Map(sourceValue, sourceType, destinationType)之间的区别。 我通过googleing找到了一些非正式的问答帖,但这些并不是真正的解释,特别是它们不是“官方文档”。

1 个答案:

答案 0 :(得分:3)

答案很简单 - AutoMapper没有实际的每个功能文档。它不是商业产品。它只是由Jimmy Bogard共享的库,您可以按原样使用它(没有详细的官方文档)。

首先要注意的是,AutoMapper的源代码具有可靠的xml注释:

/// <summary>
/// Execute a mapping from the source object to a new destination object
/// with explicit <see cref="System.Type"/> objects
/// </summary>
static object Map(object source, Type sourceType, Type destinationType)

/// <summary>
/// Create a map between the <paramref name="sourceType"/> and
/// <paramref name="destinationType"/> types and execute the map.
/// Use this method when the source and destination types are
/// not known until runtime.
/// </summary>
static object DynamicMap(object source, Type sourceType, Type destinationType)

正如它所说,在运行时直到知道源和目标类型时才应使用DynamicMap。当您使用非泛型版本的方法时,这些类型的映射之间的差异并不明确。但通常我们使用通用方法。例如。创建地图看起来像:

// here you can write type names, because you know them
Mapper.CreateMap<Source, Destination>();

创建地图后,您可以执行此映射

Source source = new Source { Id = 42, Name = "Bob" };
Destination destination = Mapper.Map<Destination>(source);

但是你不能为匿名类型使用相同的代码。例如。你有以下对象:

var source = new { Id = 13, Name = "Joe" };

您不能为此类型使用通用参数化映射创建,因为您不知道它的名称。

Mapper.CrateMap</*What goes here?*/, Destination>();

这就是引入动态映射的原因。它做了两件事 - 创建地图并执行它:

var source = new { Id = 13, Name = "Joe" };
Destination destincation = Mapper.DynamicMap<Destination>(source);

使用非泛型方法,您可以简单地使用source.GetType()来获取源对象的类型,因此这不是问题。

还有一点需要注意 - 您可以使用Jimmy的博客作为AutoMapper功能的信息来源。例如,他描述了动态映射here

相关问题