我正在使用 AutoMapper v6.1.1 将我的富域模型实体映射到一些扁平化的 DTO。
我在一个返回 的静态类中初始化配置IMapper
,它添加了我们的映射配置文件并PreserveReferences()
为我们所有的地图进行配置。
我已经针对我的源实体成员的子集声明了一个自定义属性(仅适用于 type 的成员string
)。
我想向 AutoMapper 添加一个全局配置,允许我在映射期间针对具有该属性的任何成员调用扩展方法。
这些成员中的每一个最终都会有许多不同的目标类型,所以我认为这将是一种简单的方法,可以确保始终为这些成员运行扩展方法,而无需为每个新地图显式配置它。
下面是一个人为的例子。
来源实体:
public class SomeEntity
{
public string PropertyWithoutCustomAttribute { get; set; }
[CustomAttribute]
public string PropertyWithCustomAttribute { get; set; }
}
目标实体:
public class SomeEntityDto
{
public string PropertyWithoutCustomAttribute { get; set; }
public string PropertyWithCustomAttribute { get; set; }
}
扩展方法:
public static string AppendExclamationMark(this string source)
{
return source + "!";
}
如果我的源实例是用这些值定义的:
var source = new SomeEntity
{
PropertyWithoutCustomAttribute = "Hello",
PropertyWithCustomAttribute = "Goodbye"
};
我希望以下陈述是正确的:
destination.PropertyWithoutCustomAttribute == "Hello"
destination.PropertyWithCustomAttribute == "Goodbye!"
我已经完全陷入困境(并且在文档中有些挣扎),但我认为我得到的最接近的是:
cfg.ForAllPropertyMaps(
map => map.SourceType == typeof(string) &&
map.SourceMember
.GetCustomAttributes(
typeof(CustomAttribute),
true)
.Any(),
(map, configuration) => map.???);
任何帮助将不胜感激,即使告诉我这是一个糟糕的想法或不可能。