Ninject和Singleton

时间:2009-08-18 18:37:23

标签: nhibernate singleton ninject

我的应用程序使用NHibernate和每个请求实现的会话。我有一个核心库,提供一个线程安全的单例来访问当前的nhibernate会话。

在BeginRequest和EndRequest事件中利用Web应用程序来利用该单例,以确保每个请求的会话的打开和关闭。另外,我的DataAccess层使用相同的单例来执行数据访问,因此可以利用相同的nhibernate会话。

我现在已经将Ninject添加到等式中,以便我可以在运行时推断出NHibernate上下文信息,即连接字符串。我想在我的网络配置中更改一个值,告诉它它将触及哪个数据库。问题是,为了做到这一点,我需要我的单例(如上所述)能够推断其中一个属性IConnectionStringProvider。

它连接正确,但单例永远不会有实例化属性,因此,一切都会中断。

所以,对于我的问题......如何让Ninject使用单例,或者如何更改我的实现以使用Ninject?

2 个答案:

答案 0 :(得分:2)

也许你可以尝试将单例绑定到像这样的常量

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

我使用Settings对象的Settings.Default单例执行此操作(主要是作为补丁方法,直到我有时间真正使用我的设置)并且它运行良好。

答案 1 :(得分:1)

这是许多人遇到单身人士的常见问题。虽然我不能具体评论NHibernate,但请查看Misko's Article为什么单例设计模式会遇到您描述的问题。请务必阅读评论和链接文章,了解如何处理它(或在谷歌上搜索“哪里有所有单身人士?”)。

如果你对这个话题感兴趣的话,你可能也想谷歌“单身 - 我爱你 - 但是 - 你带来了我”#

希望这有点帮助。