我的应用程序使用NHibernate和每个请求实现的会话。我有一个核心库,提供一个线程安全的单例来访问当前的nhibernate会话。
在BeginRequest和EndRequest事件中利用Web应用程序来利用该单例,以确保每个请求的会话的打开和关闭。另外,我的DataAccess层使用相同的单例来执行数据访问,因此可以利用相同的nhibernate会话。
我现在已经将Ninject添加到等式中,以便我可以在运行时推断出NHibernate上下文信息,即连接字符串。我想在我的网络配置中更改一个值,告诉它它将触及哪个数据库。问题是,为了做到这一点,我需要我的单例(如上所述)能够推断其中一个属性IConnectionStringProvider。
它连接正确,但单例永远不会有实例化属性,因此,一切都会中断。
所以,对于我的问题......如何让Ninject使用单例,或者如何更改我的实现以使用Ninject?
答案 0 :(得分:2)
也许你可以尝试将单例绑定到像这样的常量
Bind<ISession>().ToConstant(SessionSingleton.Instance);
我使用Settings对象的Settings.Default单例执行此操作(主要是作为补丁方法,直到我有时间真正使用我的设置)并且它运行良好。
答案 1 :(得分:1)
这是许多人遇到单身人士的常见问题。虽然我不能具体评论NHibernate,但请查看Misko's Article为什么单例设计模式会遇到您描述的问题。请务必阅读评论和链接文章,了解如何处理它(或在谷歌上搜索“哪里有所有单身人士?”)。
如果你对这个话题感兴趣的话,你可能也想谷歌“单身 - 我爱你 - 但是 - 你带来了我”#
希望这有点帮助。