Я использую Unity.MVC3.dll из codeplex и пытаюсь зарегистрировать экземпляр сеанса NHibernate ISession для каждого запроса. В соответствии с документами Unity MVC3 мне просто нужно использовать HierarchicalLifetimeManager для этого:
var container = new UnityContainer();
container.RegisterInstance<ISession>(SessionFactory.OpenSession(), new HierarchicalLifetimeManager());
container.RegisterControllers();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
SessionFactory - это статический объект в моем Global.asax. Когда я добавляю ISession
к одному из моих контроллеров, я получаю следующее сообщение об ошибке:
Текущий тип, NHibernate.ISession, является интерфейсом и не может быть
построен. Вам не хватает отображения типов?
Я думал, что мне не нужно RegisterType
при регистрации экземпляра?
В моем контроллере у меня есть:
[Dependency]
public ISession session { get; set; }
Я также пытался добавить ISession в качестве аргумента к одной из моих функций ActionResult
Я добавлю, что проблема не в конце NHibernate. Конфигурация прошла успешно, и я могу использовать ее для запроса информации из моей базы данных.
UPDATE
Когда я не указываю менеджер времени жизни, он работает, однако это не даст мне мой «один экземпляр на запрос», который мне нужен.
Возможно, мне придется исследовать Ninject: p