Asp.net mvc 服务层中的自动映射

Asp.net mvc 服务层中的自动映射,asp.net-mvc,automapper,service-layer,Asp.net Mvc,Automapper,Service Layer,我有一个MVC项目,我正在使用AutoMapper将我的实体框架实体映射到视图模型。定义映射的代码位于boostrapper类中,该类在应用程序启动时自动调用(App_Start,Global.asax) 我正在对代码进行重构,将所有业务逻辑放在服务层中,因为我们需要实现一个每天运行的批处理流程,该流程执行的逻辑与MVC应用程序相同 我遇到的一个问题是,现在我需要将数据库实体映射到服务层中的一些域对象。我认为在MVC应用程序中一切都可以正常工作,因为引导程序仍在Global.asax中调用 有没

我有一个MVC项目,我正在使用AutoMapper将我的实体框架实体映射到视图模型。定义映射的代码位于boostrapper类中,该类在应用程序启动时自动调用(App_Start,Global.asax)

我正在对代码进行重构,将所有业务逻辑放在服务层中,因为我们需要实现一个每天运行的批处理流程,该流程执行的逻辑与MVC应用程序相同

我遇到的一个问题是,现在我需要将数据库实体映射到服务层中的一些域对象。我认为在MVC应用程序中一切都可以正常工作,因为引导程序仍在Global.asax中调用


有没有一种方法可以让我的映射代码同时适用于我的MVC应用程序和另一个非MVC应用程序(可能是WCF服务、控制台应用程序等),我可以将此映射代码放在哪里,以便两个应用程序只调用它一次?

这里是静态类,可用于WCF服务初始化:

 public static class ServiceConfigurations
{
    private static bool mappingConfigured = false;

    public static void ConfigureMapping()
    {
        if (mappingConfigured)
        {
            return;
        }

        Mapper.CreateMap<Model1, Model2>();

        mappingConfigured = true;
    }

    public static void CleanupMapping()
    {
        Mapper.Reset();
        mappingConfigured = false;
    }
}
公共静态类服务配置
{
私有静态bool mappingConfigured=false;
公共静态void ConfigureMapping()
{
如果(已配置映射)
{
返回;
}
CreateMap();
mappingConfigured=true;
}
公共静态void CleanupMapping()
{
Reset();
mappingConfigured=false;
}
}

为什么不在您的服务项目中添加一个global.asax文件呢


将映射放到一个新项目中,同时引用这两个项目,您就完成了。

您将在哪里托管您的服务?如果在另一个应用程序中,您必须像在MVC应用程序中一样初始化映射。通常,您可以将映射代码移动到公共库。在另一个项目中可以。有没有一种好方法可以确保在其他项目中调用引导程序?如果它是一个WCF服务,是否有任何类型的WCF应用程序启动?看,这是你问题的好答案,还有这里描述的一些有用的解决方案@DerekBeattie是的,我在使用Ninject