C# 我应该把AutoMapper配置放在哪里?
我有自动映射,如下所示:C# 我应该把AutoMapper配置放在哪里?,c#,automapper,castle-windsor,ioc-container,C#,Automapper,Castle Windsor,Ioc Container,我有自动映射,如下所示: Mapper.Initialize(cfg => { cfg.CreateMap<Person, PersonViewModel>(); cfg.CreateMap<Order, OrderViewModel>(); }); 2) Global.asax 类似这样的问题表明: 我的直觉告诉我把它放在合成根目录中,但是我读到的任何地方都告诉我把它放在Global.asax中。如果你在应用程序开
Mapper.Initialize(cfg =>
{
cfg.CreateMap<Person, PersonViewModel>();
cfg.CreateMap<Order, OrderViewModel>();
});
2) Global.asax
类似这样的问题表明:
我的直觉告诉我把它放在合成根目录中,但是我读到的任何地方都告诉我把它放在Global.asax中。如果你在应用程序开始时查看Global.asax。您已经可以看到RouteConfig.RegisterRoutes等内容。这些通常调用App_Start文件夹中类的静态方法。我通常添加一个名为AutoMapperConfig的类和一个名为Configure的静态方法。然后我将其添加到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();
}
在过去,我将它们注册为Global.asax静态调用的一部分。但是,静态Mapper.Map方法已被弃用,因此我最近创建了一个静态类来设置配置映射。然后,我在应用程序的合成根中调用它,以注册
IMapper
对象,然后将其作为任何类中的依赖项
例如
公共静态类AutoMapperConfig
{
公共静态映射配置ConfigureMapping()
{
返回新的MapperConfiguration(cfg=>
{
CreateMap();
CreateMap();
});
}
}
使用Castle Windsor,您可以执行以下操作:
container.Register(
Component.For<IMapper>()
.UsingFactoryMethod(() => AutoMapperConfig.ConfigureMapping().CreateMapper())
.LifeStyle.Singleton);
container.Register(
用于()的组件
.UsingFactoryMethod(()=>AutoMapperConfig.ConfigureMapping().CreateMapper())
(1,生活方式,单身人士),;
我不相信AutoMapperConfig类会编译。它应该包含一个方法吗?我可以问一下,为什么像其他回答者一样使用Composition Root而不是Global.asax吗?谢谢。正如答案开头提到的,这样我就可以在DI容器中注册IMapper
类。这消除了对静态Mapper.Map调用的依赖性(在Automapper 5中已经过时),从而使测试等变得更容易。
public static class AutoMapperConfig
{
public static MapperConfiguration ConfigureMapping()
{
return new MapperConfiguration(cfg =>
{
cfg.CreateMap<Person, PersonViewModel>();
cfg.CreateMap<Order, OrderViewModel>();
});
}
}
container.Register(
Component.For<IMapper>()
.UsingFactoryMethod(() => AutoMapperConfig.ConfigureMapping().CreateMapper())
.LifeStyle.Singleton);