0

我正在使用 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.???);

任何帮助将不胜感激,即使告诉我这是一个糟糕的想法或不可能。

4

0 回答 0