Ninject在ToMethod中获取泛型类型

时间:2011-10-01 13:01:49

标签: ninject

我有一个像这样的存储库:

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;()

我该怎么做?

1 个答案:

答案 0 :(得分:2)

你不应该使用WithConstructorArgument;为ISession创建一个绑定。

kernel.Bind<ISession>.ToMethod(context => ....).InRequestScope();

您可以从IRepository<>获取context.Request.ParentRequest.Service类型。您现在可以使用反射提取实体类型。但是,如果您对所有实体使用相同的数据库,那么返回所有存储库的常规会话可能更容易。