ASP.NET MVC 2 Automapper Размещение - PullRequest
       17

ASP.NET MVC 2 Automapper Размещение

3 голосов
/ 02 октября 2010

Я использую Automapper для преобразования между моими моделями EF4 и моими моделями представления.Automapper нужно объявить отношения карты, и я обнаружил, что копирую / вставляю их в конструктор каждого контроллера.

Mapper.CreateMap<CoolObject, CoolObjectViewModel>();

Где я могу разместить объявления отображения, чтобы они вызывались только один раз, а не каждый раз, когда создается экземпляр контроллера?Возможно ли это?

1 Ответ

5 голосов
/ 02 октября 2010

Вы можете поместить его в application_start() из global.asax

В настоящее время у меня есть статический метод, который я вызываю из application_start, который инициализирует все мои сопоставления. Library.AutoMapping.RegisterMaps();

AutoMapper.Mapper.CreateMap(typeof(CoolObject), typeof(CoolObjectViewModel));

AutoMapper.Mapper.CreateMap<CoolObject, CoolObjectViewModel>()
    .ForMember(d => d.Property1, f => f.MapFrom(s => s.Property1))
    .ForMember(d => d.Property2, f => f.MapFrom(s => s.Property2))
    .ForMember(d => d.Property3, f => f.MapFrom(s => s.Property3));

Итак, мой контроллер выглядит примерно так. Вы заметите, что конструктор HomeController требует IDataContext. Я регистрирую IDataContext в Ninject на уровне RequestScope, и для меня создается экземпляр DataContext, который вводится в мой контроллер. Отсюда мой репозиторий уровня запросов.

public class HomeController : Controller {

    IDataContext dataContext;

    public HomeController(IDataContext dataContext) {
        this.dataContext = dataContext;
    }
}

У меня есть немного более подробное объяснение о Ninject здесь http://buildstarted.com/2010/08/24/dependency-injection-with-ninject-moq-and-unit-testing/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...