2012-05-11 3 views
4

Я пытаюсь настроить AutoMapper для создания экземпляров всех объектов через Ninject. У меня есть следующий код в моем global.asax файлеAutoMapper с Ninject

Mapper.Configuration.ConstructServicesUsing(x => kernel.Get(x)); 

И как пример у меня есть следующее отображение

Mapper.CreateMap<TestModel, IndexViewModel>(); 

Однако это, кажется, не работает. Я получаю сообщение об ошибке, что «IndexViewModel» не имеет конструктора по умолчанию.

Я могу заставить обработчик работать, явно указывая automapper на использование ninject в отображении.

Mapper.CreateMap<TestModel, IndexViewModel>().ConstructUsingServiceLocator(); 

Однако, я бы предпочел не делать этого для каждого отображения. Я что-то упускаю?

+0

Вы не предоставили источник IndexViewModel; имеет ли он конструктор по умолчанию? –

+0

@Peter Нет, у него нет конструктора по умолчанию. Если я добавлю один AutoMapper, не создаст IndexViewModel никаких проблем, однако он не будет использовать Ninject для этого. – WDuffy

+5

Почему у моделей вашего представления нет конструкторов по умолчанию? Зачем вам нужно, чтобы они управлялись Ninject? Просмотр моделей без стандартных конструкторов вызовет много головных болей. Что относительно действий контроллера POST, которые принимают эти модели представления в качестве аргументов действия? Вам придется писать для них специальные привязки моделей. Кажется сложным. –

ответ

1

Просто создайте функцию, чтобы сделать это для вас где-то в коде инициализации

void CreateMapWithServiceLocator<T1,T2>() 
{ 
    Mapper.CreateMap<T1,T2>().ConstructUsingServiceLocator(); 
} 
Смежные вопросы