【问题标题】:Where do I put this automapping?我把这个自动映射放在哪里?
【发布时间】:2011-04-06 00:45:29
【问题描述】:

我有 2 个项目,一个用于我的存储库和服务层(数据项目),一个用于我的视图、控制器(webUI 项目)。

我正在使用自动映射器,并且我一直在控制器中进行所有映射。假设我有一个获取项目的请求。它会转到我的控制器,它会联系服务层,此时任何业务逻辑都会完成。

我通常会取回一个域模型,然后我会采用该模型并在控制器中自动将其映射为视图模型。然后将 View 模型发回。

这一直很好,因为我能够将我的 mvc 代码(我的 viewModel 等)保留在我的服务层之外。

但是有两种情况我需要使用 automapper 在服务层进行映射。

服务层中的这个映射太其他领域对象了,现在已经很小了(只有几个属性)。

我应该在我的服务层中进行映射吗?

如果是这样,我应该将这些映射放在哪里?现在我把它放在我的项目中,我的控制器在应用程序启动时注册。

因此,一种选择是将我的映射放在我放置映射的位置(在我的模型文件夹中的一个类中)。这样做的问题是,如果我将我的服务层弹出到另一个项目(比如移动设备)中,那么我必须重做所有映射,因为它不存在。

有什么想法吗?

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-3 automapper


    【解决方案1】:

    在您的服务层中有一个名为“ServiceLayerMappings”的类,并从应用程序启动时调用它。

    如果您重用服务层,只需调用 ServiceLayerMappings.MapThisStuff() 或其他任何方法即可。

    public class ServiceLayerMappings
    {
         public void Map()
         {
    
            Mapper.CreateMap<MyServiceClass, ServiceDto>();
         }
    }
    

    Global.asax.cs

        protected void Application_Start(object sender, EventArgs e)
        {
             new ServiceLayerMappings().Map()
    

    您当然可以将其设为静态或重命名。没关系。

    【讨论】:

    • 请您解释一下如何在应用程序启动中使用它以及如何实现和维护这个类
    • 我终于可以尝试一下了,但我做的事情有点不同。我正在使用 Register(RegisterServiceLayerMaps.Register();) 而不是你在做什么。你可以只有一种注册方法或其他东西吗?因为当我注册两次时,它似乎会导致我的工作自动映射器崩溃。
    猜你喜欢
    • 2014-03-04
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 2014-02-27
    • 2016-03-08
    相关资源
    最近更新 更多