【问题标题】:Skipping Dispose on Deactivation in Ninject在 Ninject 中跳过停用处理
【发布时间】:2012-05-08 15:03:54
【问题描述】:

我刚刚开始在一个(大型)项目中使用 Ninject,并且我只使用 DI 来启动其中的一部分。我有一个广泛使用构造函数注入组织的子系统。使用 Ninject 在这个子系统中注入所有类之间的依赖关系非常好。但是,我对子系统之外的东西有依赖关系,我真的很想使用 Ninject 来自动注入,但不负责它们的生命周期。

我认为Bind<T>.ToConstant(...) 会为我正在尝试做的事情工作。例如,我可能有一个 Monkey 类型的类来充当单例,但我的应用程序的另一部分是在没有 Ninject 的情况下处理它的生命周期(例如,创建它并手动处理它)。创建配备 Ninject 的子系统后,我实例化一个内核,绑定我的子系统类,然后使用 Bind<Monkey>.ToConstant(Monkey.Instance) 之类的东西绑定到各种“外部”依赖项。这在激活时效果很好,但在我处理内核时不能按需要工作。我的子系统的生命周期可能比这些外部依赖项更短,但是当我在内核上调用 Dispose 时,所有这些依赖项都会被释放,这不是我想要的。虽然我可以看到两种方式的论点,但 Ninject 会自动处理一个它没有创建的对象似乎有点可疑。我希望至少有一种方法可以选择退出这种行为,但到目前为止我还没有找到任何东西。这有什么支持吗?

【问题讨论】:

    标签: c# ninject ninject-2


    【解决方案1】:

    InTransientScope 添加到您的常量对象中。

    【讨论】:

    • 谢谢,这行得通!仅出于我自己的理解,我了解瞬态作用域如何用于激活。对于停用,Ninject 在使用 Transient 范围时是否永远不会 Dispose 它创建的实例(我可能在阅读中错过了这一点)。此外,对于常量,默认 Singleton 和 Transient 范围之间的唯一区别是对象在停用时是否被释放?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    相关资源
    最近更新 更多