Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 MVC 3:AutoMapper和项目/解决方案结构_Asp.net Mvc 3_Automapper_Projects And Solutions - Fatal编程技术网

Asp.net mvc 3 MVC 3:AutoMapper和项目/解决方案结构

Asp.net mvc 3 MVC 3:AutoMapper和项目/解决方案结构,asp.net-mvc-3,automapper,projects-and-solutions,Asp.net Mvc 3,Automapper,Projects And Solutions,我刚刚开始在我的MVC3项目中使用AutoMapper,我想知道这里的人们在使用它时是如何组织他们的项目的。我创建了一个MapManager,它只有一个SetupMaps方法,我在global.asax中调用该方法来创建初始地图配置。我还需要为我的一个映射使用ValueResolver。对我来说,这个特殊的ValueResolver在几个不同的地方都需要,它只需从Article.GenerateSlug返回一个值即可 因此,我的问题是: 如何管理所有地图的初始创建(Mapper.CreateMa

我刚刚开始在我的MVC3项目中使用AutoMapper,我想知道这里的人们在使用它时是如何组织他们的项目的。我创建了一个
MapManager
,它只有一个
SetupMaps
方法,我在global.asax中调用该方法来创建初始地图配置。我还需要为我的一个映射使用
ValueResolver
。对我来说,这个特殊的
ValueResolver
在几个不同的地方都需要,它只需从
Article.GenerateSlug
返回一个值即可

因此,我的问题是:

  • 如何管理所有地图的初始创建(
    Mapper.CreateMap
  • 在项目中,您将
    ValueResolver
    s的类放在哪里?您是在模型文件夹下还是在其他文件夹下创建子文件夹

  • 感谢您的帮助。

    我不会把问题2作为个人偏好来回答,但对于问题1,我通常使用一个或多个
    AutoMapper.Profile
    来保存我所有的
    Mapper.CreateMap
    ,以实现特定目的(domaintoviewmodel等)

    然后在我的global.asax中,我获取
    IInitializer
    的所有实例,并在它们之间循环运行
    Execute()

    foreach (var initializer in ObjectFactory.GetAllInstances<IInitializer>())
                {
                    initializer.Execute();
                }
    
    foreach(ObjectFactory.GetAllInstances()中的变量初始值设定项)
    {
    initializer.Execute();
    }
    
    这是我的总策略


    根据请求,这里是反射实现的最后一步

    var iInitializer = typeof(IInitializer);
    
    List<IInitializer> initializers = AppDomain.CurrentDomain.GetAssemblies()
        .SelectMany(s => s.GetTypes())
        .Where(p => iInitializer.IsAssignableFrom(p) && p.IsClass)
        .Select(x => (IInitializer) Activator.CreateInstance(x)).ToList();
    
    foreach (var initializer in initializers)
    {
        initializer.Execute();
    }
    
    var iInitializer=typeof(iInitializer);
    列表初始值设定项=AppDomain.CurrentDomain.GetAssemblys()
    .SelectMany(s=>s.GetTypes())
    其中(p=>iInitializer.IsAssignableFrom(p)和&p.IsClass)
    .Select(x=>(IInitializer)Activator.CreateInstance(x)).ToList();
    foreach(初始化器中的var初始化器)
    {
    initializer.Execute();
    }
    
    我喜欢这件衣服的外观。不过我有一个问题。我不知道什么是
    ObjectFactory.GetAllInstances
    。通过谷歌搜索,它似乎是StructureMap的一部分。我从未使用过它,所以有没有.NET BCL等价于
    ObjectFactory.GetAllInstances
    ?谢谢你的回答。:)如果您没有使用ioc容器,请启动。structuremap是我最常用的,但也有其他的。我已经用.net反射方式更新了我的答案。这很简单。@johnh,没问题。一定要使用IInitializer的东西,而不仅仅是automapper。想想你通常会放在global.asax中的任何东西。否则,反思的代价就不值得了。我会的。我很感激这样的评论,因为我使用MVC才几个星期。
    foreach (var initializer in ObjectFactory.GetAllInstances<IInitializer>())
                {
                    initializer.Execute();
                }
    
    var iInitializer = typeof(IInitializer);
    
    List<IInitializer> initializers = AppDomain.CurrentDomain.GetAssemblies()
        .SelectMany(s => s.GetTypes())
        .Where(p => iInitializer.IsAssignableFrom(p) && p.IsClass)
        .Select(x => (IInitializer) Activator.CreateInstance(x)).ToList();
    
    foreach (var initializer in initializers)
    {
        initializer.Execute();
    }