Зависимости преобразователя пользовательского типа AutoMapper

Я пытаюсь реализовать Automapper для сопоставления ViewModel с сущностью, где одно из свойств сущности также является сущностью.

Я хочу, чтобы мой конвертер использовал метод ISession.Load‹> NHibernate для загрузки этого.

Итак, вопрос в том, как лучше всего внедрить ISession в мою реализацию ITypeConverter? Также следует иметь в виду, что внедренная ISession будет удалена, поэтому мне нужно будет вводить новую ISession каждый раз, когда необходимо выполнить сопоставление?


person adriaanp    schedule 07.01.2010    source источник
comment
В качестве совета: этот сайт работает следующим образом: если вы обнаружите, что кто-то ответил на ваш вопрос, вы должны отметить этот ответ как правильный. это означает, что когда у других возникает такая же проблема, они могут видеть ее решения.   -  person griegs    schedule 08.01.2010


Ответы (2)


Мы делаем это в наших системах, и у нас есть такие вещи, как преобразователи типа Guid-> Entity. Однако мы ограничиваем наши ISessions по HttpContext, поэтому новый ISession не будет внедряться для каждого ITypeConverter. Однако AutoMapper создает новый экземпляр ITypeConverter каждый раз, когда это необходимо.

Но объединение двух объектов из разных экземпляров ISession приведет к проблемам. Просто убедитесь, что вы используете один экземпляр ISession для каждого HttpContext, и все будет готово.

person Jimmy Bogard    schedule 08.01.2010
comment
Джимми, у меня есть еще одна проблема, так как мне не нужен ISession напрямую, но с добавлением к IRepository, поэтому мои ITypeConverter (ы) будут зависеть от разных IRepositories. Я думаю, что единственный способ заставить это работать - запросить у моего IoC IRepository в ITypeConverter, которого я пытаюсь избежать. - person adriaanp; 11.01.2010
comment
Есть ли способ перехватить экземпляр ITypeConverter в AutoMapper? - person adriaanp; 11.01.2010
comment
Да, обычно мы делаем это в вызове Initialize, используя метод ConstructServicesUsing(), чтобы настроить AutoMapper на использование нашего контейнера для всех средств форматирования, преобразователей и преобразователей типов. - person Jimmy Bogard; 12.01.2010

Я не знаю о nHibernate, извините, и, похоже, никто не хочет отвечать на этот вопрос, поэтому...

Я бы решил эту проблему, возможно, написав свой собственный модуль связывания моделей. Затем он может быть ответственным за сопоставление моей ViewModel с моей сущностью.

У вас также будет доступ к объекту HttpRequest, чтобы вы могли получить все свои текстовые поля и сопоставить их с вашей сущностью.

Я надеюсь, что это поможет, даже если это не относится к вашему вопросу.

person griegs    schedule 08.01.2010
comment
Это сработает, но я пытаюсь использовать такие инструменты, как AutoMapper, чтобы мне не приходилось сопоставлять каждое свойство вручную. - person adriaanp; 11.01.2010