#ninject
#ninject
Вопрос:
У меня есть такой репозиторий:
public class Repository<T> : IRepository<T> where T : class
{
private readonly ISession session;
public Repository(ISession session)
{
this.session = session;
}
}
Я использую NHQ, и я обычно делаю это, чтобы получить объект ISession:
SessionFactory.For<T>().OpenSession();
Как мне настроить Ninject на автоматическое создание сеанса для запрошенного типа и его привязку? Я пробовал это, но я не знаю, что вставить в For<>():
kernel.Bind(typeof(IRepository<>))
.To(typeof(Repository<>))
.WithConstructorArgument("session", SessionFactory.For<>().OpenSession());
Похоже, мне нужно получить используемый универсальный тип и передать его в For<>()
Как мне это сделать?
Ответ №1:
Вы не должны использовать WithConstructorArgument
; вместо этого создайте привязку для ISession.
kernel.Bind<ISession>.ToMethod(context => ....).InRequestScope();
Вы можете получить IRepository<>
тип из context.Request.ParentRequest.Service
. Теперь вы можете извлечь тип объекта с помощью отражения. Однако, если вы используете одну и ту же базу данных для всех объектов, то, вероятно, проще вернуть общий сеанс для всех репозиториев.