Asp.net mvc 3 MVC 3:AutoMapper和项目/解决方案结构
我刚刚开始在我的MVC3项目中使用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
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();
}