我正在尝试配置我的Object Mapper而不知道我正在使用哪个mapper。 :/
这听起来有点奇怪。这样做的原因是我正在尝试使用洋葱架构,因此我的UI无法了解我的基础架构中的Object Mapper。有关示例,请参阅this solution。
我在弄清楚如何“委托”无默认映射行为时遇到了一些麻烦。 像:
Mapper
.CreateMap<MyModel, MyDestViewModel>()
.ForMember(
dest => dest.SomeDestinationProperty,
opt => opt.MapFrom(src => src.SomeSourceProperty)
);
我在我的MVC项目中设置了一个从Global.asax调用的类,这是我想要配置映射的地方。
public static class MapConfig
{
public static void RegisterMaps()
{
}
}
我以为我可以做以下事情。 (IMapper是位于Domain中的自定义接口)
public static void RegisterMaps(HttpConfiguration config)
{
var mapper = config.DependencyResolver.GetService(IMapper);
mapper.CreateMap<MyModel, MyViewModel>();
}
现在......我将如何设置像.ForMember这样的特殊行为?请记住,它不能特定于AutoMapper。
我正在思考这些问题mapper.CreateMap<MyModel, MyViewModel>(Expression<Func<T>>)
,其中Func会做一些我现在无法弄清楚的黑魔法:( - 我是在正确的道路上还是我错过了一些必要的东西?
答案 0 :(得分:11)
Onion Architecture不是关于配置与实现无关,而是关于执行。
只需创建一个IMapper接口来执行映射,但不要担心配置。这适用于您的ORM,IoC容器和其他所有内容。
此外,洋葱架构不是关于项目结构,而是关于依赖关系的方向。只需在UI中调用CreateMap即可。然后,您可以在Core中一直定义一个IMapper接口,其他部分实现一个委托给AutoMapper的版本。
答案 1 :(得分:3)
你正在抽象出有用的功能,这会花费你比你最初意识到的更多的时间。为什么不花时间选择一个映射器并坚持使用它?
为什么您的UI不了解您的映射器这么重要?假设您正在使用MVC,那么您将灵活地展示您选择的mappers功能,以平整我们的域模型,无论如何都要查看模型。
它是人们使用通用存储库实现的同样的废话,以防他们决定切换ORM中期项目。
仔细选择您的基础设施并坚持下去。