我现有的解决方案有很多重复,如下所示:
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它将从映射的子属性.
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 端引入耦合。我已经通过共享解析器删除了重复项。
| 归档时间: |
|
| 查看次数: |
281 次 |
| 最近记录: |