2011-03-18 67 views
2

是否可以有條件地解析爲基於MVC的行動正確ISession範圍屬性?是否有可能有Ninject綁定範圍條件?

Bind<ISession>().ToMethod(ctx => (ISession)NHibernateHelper.Open()) 
       .InRequestScope(); 

Bind<ISession>().ToMethod(ctx => (ISession)NHibernateHelper.Open()) 
       .InSessionScope(); 


僞的可能解決方案代碼:

Bind<ISession>().ToMethod(...).InSessionScope() 
       .WhenActionHasAttribute(LongConversation); 

// else use this binding 
Bind<ISession>().ToMethod(...).InRequestScope() 

也許我的做法是錯誤的,我打開我的問題altnerative解決方案。

根據網頁「對話」的類型,我需要或者保持NHibernateSession各地的HTTP請求/響應或HTTP會話。大多數會話只持續一個HTTP請求/響應。

InSessionScopeFredrik Kalseth

回答

1

聖雷莫你的答案是不是在任何情況下是正確的。當你應該在你的控制器中進行ISession訪問時,有理由。即出於性能原因,直接在控制器中查詢會話是有意義的。當控制器的單一職責是顯示某個客戶時,爲什麼你應該直接調用ISession.Load(id)?其他一切都可能是不必要的抽象。

1

直接從控制器訪問會話不是一個好的設計呢。控制器在這種情況下做得很好。

我寧願實現一個獲得不同範圍的NHilbernate不同的服務,並將其注入到你的控制器。這樣,定義兩個必需的綁定應該很容易。例如,您可以添加屬性聲明該會話將被注入,並在綁定使用WhenClassHas服務。

相關問題