Dependency injection 配置映射行为';s非特定框架

Dependency injection 配置映射行为';s非特定框架,dependency-injection,automapper,onion-architecture,Dependency Injection,Automapper,Onion Architecture,我正在尝试配置我的对象映射器,但不知道正在使用哪个映射器:/ 这听起来可能有点奇怪。这是因为我正在尝试洋葱架构,所以我的UI无法知道我的基础结构中的对象映射器。有关示例,请参见 我在弄清楚如何“委托”非默认映射行为时遇到了一些问题。 比如: Mapper .CreateMap<MyModel, MyDestViewModel>() .ForMember( dest => dest.SomeDestinationProperty,

我正在尝试配置我的对象映射器,但不知道正在使用哪个映射器:/

这听起来可能有点奇怪。这是因为我正在尝试洋葱架构,所以我的UI无法知道我的基础结构中的对象映射器。有关示例,请参见

我在弄清楚如何“委托”非默认映射行为时遇到了一些问题。 比如:

Mapper
    .CreateMap<MyModel, MyDestViewModel>()
    .ForMember(
        dest => dest.SomeDestinationProperty,
        opt => opt.MapFrom(src => src.SomeSourceProperty)
    );
我在想我可以做如下的事情。(IMapper是位于域中的自定义接口)

公共静态无效注册表映射(HttpConfiguration配置)
{
var mapper=config.dependencyrolver.GetService(IMapper);
CreateMap();
}
现在。。。我该如何设置像.ForMember这样的特殊行为?请记住,它不能是特定于AutoMapper的


我一直在想一些事情,比如Func会产生一些我现在无法理解的黑魔法:(-我走的是正确的道路还是错过了一些重要的东西?

洋葱架构与配置无关,它与执行有关

只需创建一个用于执行映射的IMapper接口,但不必担心配置问题。这适用于您的ORM、IoC容器和其他一切


此外,洋葱架构与项目结构无关,它与依赖关系的方向有关。只需在UI中调用CreateMap。然后,您就可以在Core中定义一个IMapper接口,其他部分实现一个委托给AutoMaper的版本。

洋葱架构与正在实现的配置无关不可知论者,这是关于死刑的

只需创建一个用于执行映射的IMapper接口,但不必担心配置问题。这适用于您的ORM、IoC容器和其他一切


此外,Onion架构与项目结构无关,它与依赖关系的方向有关。只需在UI中调用CreateMap。然后,您就可以在Core中定义一个IMapper接口,其他部分实现一个委托给AutoMaper的版本。

您正在抽象出将花费您大量成本的有用功能时间比你最初意识到的要多。为什么不花时间选择一个映射器并坚持使用它呢

为什么你的用户界面不知道你的映射器是如此重要?假设你使用MVC,你将调整你所选择的映射器的许多功能,以使我们的领域模型平坦化,从而查看模型

这和人们在项目中期使用通用存储库实现“以防万一”的做法是一样的


仔细选择基础设施并坚持使用。

您正在提取有用的功能,这些功能将花费比您最初意识到的更多的时间。为什么不花时间选择映射器并坚持使用呢

为什么你的用户界面不知道你的映射器是如此重要?假设你使用MVC,你将调整你所选择的映射器的许多功能,以使我们的领域模型平坦化,从而查看模型

这和人们在项目中期使用通用存储库实现“以防万一”的做法是一样的


仔细选择您的基础架构并坚持使用它。

如果我误解了您的意思,我很抱歉。但是我应该创建一个IMapper,其中包含我在AutoMaper中需要的函数的1:1映射?是的,但是没有CreateMap调用。只有Map调用。这就像抽象您的ORM配置,这是不明智的。所以我只是从我是IMappingEngine。也许当我更熟悉它时,这会变得更有意义:)如果我误解了你,我很抱歉。但是我应该创建一个IMapper,其中包含我在AutoMapper中需要的函数的1:1映射?是的,但是没有CreateMap调用。只有地图调用。这就像是抽象你的ORM配置,这是不明智的。对,所以我只是从ImapingEngine中提取c/p。也许当我更熟悉它时,这会变得更有意义:)
public static class MapConfig
{
    public static void RegisterMaps()
    {

    }
}
public static void RegisterMaps(HttpConfiguration config)
{
    var mapper = config.DependencyResolver.GetService(IMapper);
    mapper.CreateMap<MyModel, MyViewModel>();
}