2011-10-01 26 views
1

我有這樣的倉庫:Ninject得到一個通用型ToMethod

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自動爲請求的類型創建會話並綁定它?我試過,但我不知道要放什麼東西在對於<>():

kernel.Bind(typeof(IRepository<>)) 
    .To(typeof(Repository<>)) 
    .WithConstructorArgument("session", SessionFactory.For<>().OpenSession()); 

看起來我需要獲得泛型類型中使用,並通過它在對於<>()

我該怎麼做?

回答

2

您不應該使用WithConstructorArgument;改爲爲ISession創建一個綁定。

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

您可以從context.Request.ParentRequest.Service得到IRepository<>類型。現在可以使用反射來提取實體類型。但是,如果您對所有實體使用相同的數據庫,那麼爲所有存儲庫返回一般會話可能更容易。