在 automapper 中重用映射

Mys*_*ter 2 automapper

我现有的解决方案有很多重复,如下所示:

config.CreateMap<IPublishedContent, ContactListingPage>()
            .ForMember(n => n.Title, map => map.ResolveUsing(AppearanceManager.GetTitle));
config.CreateMap<IPublishedContent, NewsListingPage>()
            .ForMember(n => n.Title, map => map.ResolveUsing(AppearanceManager.GetTitle));
Run Code Online (Sandbox Code Playgroud)

有没有办法消除这种重复?
我试过:使用接口:

config.CreateMap<IPublishedContent, IHaveTitle>()
            .ForMember(n => n.Title, map => map.ResolveUsing(AppearanceManager.GetTitle));
Run Code Online (Sandbox Code Playgroud)

但实际的映射操作需要针对具体类型,所以不使用这种映射。

注意:我希望混合和匹配映射,所以所有页面都有标题,有些页面有促销等......

我试过: 为标题创建一个自定义类型,隐式转换为字符串,我认为这“会”工作,除了我实际上需要IPublishedContent对象作为 GetTitle 方法的输入而不是PublishedProperty它将从映射的子属性.

Jim*_*ard 5

AutoMapper 不会尝试按设计重用映射 - 主要是因为在这些情况下我会混淆自己。您选择加入共享映射:

Mapper.Initialize(cfg => {
    cfg.CreateMap<IPublishedContent, IHaveTitle>()
        .ForMember(n => n.Title, map => map.ResolveUsing(AppearanceManager.GetTitle));

    cfg.CreateMap<IPublishedContent, ContactListingPage>()
        .IncludeBase<IPublishedContent, IHaveTitle>();
    cfg.CreateMap<IPublishedContent, NewsListingPage>()
        .IncludeBase<IPublishedContent, IHaveTitle>();
});
Run Code Online (Sandbox Code Playgroud)

我通常对这些非常小心,因为我不一定要在 ViewModel 端引入耦合。我已经通过共享解析器删除了重复项。