我有一个像这样的存储库:
public class Repository<T> : IRepository<T> where T : class
{
private readonly ISession session;
public Repository(ISession session)
{
this.session = session;
}
}
我使用NHQS并且我通常这样做以获得一个ISession对象:
SessionFactory.For<T>().OpenSession();
如何设置Ninject以自动为所请求的类型创建会话并绑定它?我尝试了这个,但我不知道在For&lt;&gt;()中放入什么:
kernel.Bind(typeof(IRepository<>))
.To(typeof(Repository<>))
.WithConstructorArgument("session", SessionFactory.For<>().OpenSession());
看起来我需要获取正在使用的泛型类型并将其传递给For&lt;&gt;()
我该怎么做?
答案 0 :(得分:2)
你不应该使用WithConstructorArgument
;为ISession创建一个绑定。
kernel.Bind<ISession>.ToMethod(context => ....).InRequestScope();
您可以从IRepository<>
获取context.Request.ParentRequest.Service
类型。您现在可以使用反射提取实体类型。但是,如果您对所有实体使用相同的数据库,那么返回所有存储库的常规会话可能更容易。