我现有的解决方案有很多重复:
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));
有没有办法消除这种重复?
我尝试了使用界面:
config.CreateMap<IPublishedContent, IHaveTitle>()
.ForMember(n => n.Title, map => map.ResolveUsing(AppearanceManager.GetTitle));
但实际的地图操作需要是具体类型,因此不使用此映射。
注意:我希望混合和匹配映射,所以所有页面都有标题,有些页面有促销等...
我试过了:
通过隐式转换为字符串为标题创建自定义类型,我认为这样做会“#39;工作除了我实际上需要IPublishedContent
对象作为GetTitle方法的输入而不是它将从中映射的子属性PublishedProperty
。
答案 0 :(得分:4)
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>();
});
我通常非常小心这些,因为我不一定想在ViewModel端引入耦合。我已经通过共享解析器删除了复制。