【发布时间】:2016-02-11 09:13:24
【问题描述】:
例如,假设我需要映射这些类:
public class Dto
{
public List<string> Items { get; set; } = new List<string> { "orange", "apple" }
}
public class DomainObject
{
public List<string> Items { get; set; }
}
...我想使用 AutoMapper 配置一个自定义映射,它在执行一些必须同时存在 Dto 和 DomainObject 的操作后返回 DomainObject,或者至少我应该能够得到源Items 和目标Items。
为什么我需要这个?
因为我正在将 DTO 映射到跟踪更改的对象,并且我需要提供一种自定义方法来映射集合,以免在映射操作之前丢失跟踪信息。
目前,我已经使用扩展方法在代码中实现了整个集合映射,但我想将此扩展方法称为 AutoMapper 配置的一部分,以使代码尽可能简单并保持 DRY。
可能的部分解决方案
我发现 AutoMapper 有以下IMappingExpression<TSource, TDestination> 方法:
IMappingExpression<TSource, TDestination> AfterMap(Action<TSource, TDestination> afterFunction);
虽然这解决了我 90% 的问题,但仍然存在问题。 AfterMap 没有给出当前IMapper 的实例。我不再使用静态 Mapper,但我在 Castle Windsor 上为 IMapper 配置了一个自定义工厂,所以我可以在任何地方注入它。
我还需要一个当前IMapper 的实例。我可以解决IMapper a la Service Locator 反模式,但我想知道 AutoMapper 是否还有另一种方法来完成 AfterMap 已经做的事情,也许它可以提供当前IMapper 某种方式...
【问题讨论】:
标签: c# .net automapper dto