В этом сценарии я использую библиотеку AutoMapper
в ASP.MVC 3.0 для обработки отображения между объектами dto и модели.Я попытался разместить весь код конфигурации AutoMapper в одном месте, поэтому он имеет следующую структуру:
protected void Application_Start()
{
ConfigureAutoMapper();
AreaRegistration.RegisterAllAreas();
SetupWindsorContainer();
RegisterRoutes(RouteTable.Routes);
}
...
private void ConfigureAutoMapper()
{
Mapper.CreateMap<SampleDto, SampleModel>();
...
}
Этот код находится в классе MvcApplication
.С помощью отладчика я проверил, что этот код выполняется, но когда я пытаюсь выполнить Mapper.Map<>
в коде контроллера, я получаю исключение, сообщающее, что отображение не было зарегистрировано.Я подозревал, что это связано с тем, как ASP.MVC обрабатывает AppDomains
, но, похоже, это то же самое AppDomain
в обоих методах (регистрационный код и код отображения).ASAIR этот код выполняется правильно на ASP.MVC 2.0
EDIT 1: в соответствии с документацией MS для Application_Start
:
"Вызывается, когда первый ресурс (например, страница) взапрашивается приложение ASP.NET. Метод Application_Start вызывается только один раз в течение жизненного цикла приложения. Этот метод можно использовать для выполнения задач запуска, таких как загрузка данных в кэш и инициализация статических значений.
При запуске приложения следует задавать только статические данные. Не устанавливайте никакие данные экземпляра, поскольку они будут доступны только первому экземпляру создаваемого класса HttpApplication. "
Конфигурация AutoMapper является статическим классомпоэтому я думаю, что он должен работать правильно при инициализации в Application_Start
, но это не так.