在这种情况下,我在ASP.MVC 3.0中使用AutoMapper
库来处理dto和模型对象之间的映射。我试图将所有AutoMapper配置码在一个地方,因此它具有以下结构:AutoMapper配置在使用ASP.MVC 3.0时重置
protected void Application_Start()
{
ConfigureAutoMapper();
AreaRegistration.RegisterAllAreas();
SetupWindsorContainer();
RegisterRoutes(RouteTable.Routes);
}
...
private void ConfigureAutoMapper()
{
Mapper.CreateMap<SampleDto, SampleModel>();
...
}
此代码被放置在MvcApplication
类。通过调试器,我检查了这个代码是否被执行,但是当我尝试在Controller代码中执行Mapper.Map<>
时,我得到了怀疑映射尚未注册的说法。我曾怀疑这与ASP.MVC如何处理AppDomains
有关,但在两种方法(注册码和映射代码)中似乎都是相同的AppDomain
。 ASAIR此代码上ASP.MVC 2.0
EDIT 1正确执行:上Application_Start
根据MS文档:
“时调用在ASP.NET 应用所述第一资源(例如,页)被请求。Application_Start方法中的一个应用程序的生命周期中只能调用 一次。您可以使用此方法 执行启动任务,如将数据加载到高速缓存 和初始化静态值。
你应该在应用程序启动时只设置静态数据。不要设置 任何实例数据,因为这将是仅适用于创建的HttpApplication类的第一个 实例。”
AutoMapper配置是静态类,所以我觉得在Application_Start
初始化时,它应能正常工作,但事实并非如此。
你不应该把你的AutoMapper配置放在'BeginRequest'中,因为不需要在每个请求上重新创建配置(出于性能的原因) –
我同意 - 只是指出它为什么不起作用,而穷人解决方法。 – Cymen
看看我的'编辑1'笔记。我不同意这个代码不能从'Application_Start'执行,因为它足够为AppDomain调用一次。 – jethro