代码之家  ›  专栏  ›  技术社区  ›  ctorx

Ninject和Singleton

  •  3
  • ctorx  · 技术社区  · 17 年前

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

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

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

    所以,对于我的问题…我如何让Ninject与单例一起工作,或者如何将我的实现更改为与Ninject一起工作?

    2 回复  |  直到 17 年前
        1
  •  2
  •   Jeffrey Cameron    17 年前

    也许你可以试着把这个单子绑定到一个常数,就像这样

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

    我是通过设置来实现的。默认设置对象的单例(在我有时间真正使用设置之前,主要是作为补丁方法),它工作得非常好。

        2
  •  1
  •   Andres    17 年前

    Misko's Article 关于为什么单例设计模式会遇到您描述的问题。一定要阅读评论和链接文章,了解如何应对(或者在谷歌上搜索“单身人士都去哪里了?”)。

    如果你对这个话题感兴趣,你也可以在谷歌上搜索“singleton-i-love-you-but-Your-Ring-me-down”

    希望这有点帮助。