我有AutoMapper映射,如下所示:
Mapper.Initialize(cfg =>
{
cfg.CreateMap<Person, PersonViewModel>();
cfg.CreateMap<Order, OrderViewModel>();
});
我试图找出将此代码放在MVC应用程序中的位置。有两种选择:
1)组合根
public class CompositionRoot : IWindsorInstaller
{
//Castle Windosr configuration goes here
//Call to AutoMapper configuration class here
}
2)Global.asax
这样的问题表明:Where to place AutoMapper.CreateMaps?
我的直觉告诉我把它放在Composition Root中,但是我读到的任何地方都告诉我把它放在Global.asax中。
答案 0 :(得分:2)
如果您在Application_Start上查看Global.asax。您已经可以看到RouteConfig.RegisterRoutes等内容。这些通常在App_Start文件夹中的类上调用静态方法。我通常使用名为Configure的静态方法添加一个名为AutoMapperConfig的类。然后我将其添加到Gloabl.asax的列表中。见下文:
void Application_Start(object sender, EventArgs e)
{
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
ModelBindersConfig.Configure();
DevExpressConfig.Configure();
AutoMapperConfig.Configure();
}
答案 1 :(得分:1)
过去我将它们注册为Global.asax的静态调用的一部分。但是,静态Mapper.Map方法已被弃用,所以我最近创建了一个静态类来设置配置映射。然后我在我的应用程序的组合根目录中调用它来注册IMapper
对象,然后我可以将其作为任何类中的依赖项。
E.g。
public static class AutoMapperConfig
{
public static MapperConfiguration ConfigureMapping()
{
return new MapperConfiguration(cfg =>
{
cfg.CreateMap<Person, PersonViewModel>();
cfg.CreateMap<Order, OrderViewModel>();
});
}
}
使用Castle Windsor,您可以执行以下操作:
container.Register(
Component.For<IMapper>()
.UsingFactoryMethod(() => AutoMapperConfig.ConfigureMapping().CreateMapper())
.LifeStyle.Singleton);