2009-08-18 48 views
3

我的應用程序使用NHibernate爲每個請求實現一個會話。我有一個核心庫,它提供了一個線程安全的singleton來訪問當前的nhibernate會話。Ninject和Singleton

在BeginRequest和EndRequest事件中,Web應用程序利用這個單例來確保每個請求都打開和關閉會話。此外,我的DataAccess層使用相同的單例來執行數據訪問,以便使用相同的nhibernate會話。

我現在已經在等式中添加了Ninject,以便我可以在運行時推斷出NHibernate的上下文信息,即連接字符串。我想在我的web配置中更改一個值,告訴它它將會擊中哪個數據庫。問題是,爲了做到這一點,我需要我的單例(如上所述)能夠推斷出它的一個屬性IConnectionStringProvider。

它連接正確,但單身永遠不會有實例化的屬性,因此,一切都打破。

因此,對於我的問題......我如何讓Ninject與singleton一起工作,或者如何改變我的實現以使用Ninject?

回答

1

這是很多人遇到的單身人士常見的問題。雖然我不能具體評論NHibernate,但請查看Misko's Article,瞭解爲什麼單例設計模式會遇到您描述的問題。請務必閱讀評論和鏈接文章,瞭解如何處理它(或者搜索谷歌上的「所有單身人士在哪裏?」)。

如果你有興趣這個主題,你可能還需要谷歌「單身,我愛你,但是,您選擇,把我向下」

希望幫助一點點。

2

也許你可以試試單結合恆定像這樣

Bind<ISession>().ToConstant(SessionSingleton.Instance); 

我這樣做與設置對象(大多爲打補丁方法,直到我有時間去真正玩的Settings.Default單我的設置),它工作得很好。