我刚刚开始在一个(大型)项目中使用Ninject,并且只是使用DI来启动它的一部分。我有一个使用构造函数注入广泛组织的子系统。使用Ninject注入这个子系统中的类之间的所有依赖关系是很好的。但是,我依赖于子系统之外的东西,我真的想使用Ninject自动注入,但不是负责它们的生命周期。
我认为Bind<T>.ToConstant(...)
适用于我想做的事情。例如,我可能有一个类型的Monkey类作为Singleton,但我的应用程序的另一部分是在没有Ninject的情况下处理它的生命周期(例如,创建它并手动处理它)。当我的Ninject配备子系统被创建时,我实例化一个内核,绑定我的子系统类,然后使用类似Bind<Monkey>.ToConstant(Monkey.Instance)
的东西绑定到各种“外部”依赖项。这在激活时工作得很好但在我处理内核时不能按需工作。我的子系统可以比这些外部依赖项具有更短的生命周期,但是当我在内核上调用Dispose时,所有这些依赖项都会被释放,这不是我想要的。虽然我可以通过两种方式看到参数,但是Ninject会自动处理它没有创建的对象似乎有点可疑。我希望至少有一种方法可以选择退出这种行为,但到目前为止我还没有发现任何东西。对此有任何支持吗?
答案 0 :(得分:5)
将InTransientScope
添加到常量对象。