Dependency injection Ninject:向Ninject注册已创建的实例?

Dependency injection Ninject:向Ninject注册已创建的实例?,dependency-injection,ninject,ninject-2,Dependency Injection,Ninject,Ninject 2,有谁能告诉我,我是否可以用Ninject注册一个已经创建的类实例,以便它在每次需要注入时都使用这个实例 我想你可以称之为singleton,但我已经创建了这个实例。所有文档都指向创建一个类的新实例。您可以使用ToConstant方法,该方法接受一个已经存在的实例并将其注册为singleton var kernel = new StandardKernel(); kernel.Bind<MyClass>().ToConstant(myClassInstance); .InSingle

有谁能告诉我,我是否可以用Ninject注册一个已经创建的类实例,以便它在每次需要注入时都使用这个实例


我想你可以称之为singleton,但我已经创建了这个实例。所有文档都指向创建一个类的新实例。

您可以使用
ToConstant
方法,该方法接受一个已经存在的实例并将其注册为singleton

var kernel = new StandardKernel();
kernel.Bind<MyClass>().ToConstant(myClassInstance);

.InSingletonScope()是您所需要的。它创建一个实例,并将其穿入需要它的所有内容中,因为它就是这样滚动的。谢谢,但是InSingleScope创建了该实例,我已经有了该实例,它已经用很多属性初始化了。。。。所以我需要注册那个特定的实例。。。你有一个例子吗?记住,你应该建立一个依赖关系图,你不应该更新任何对象,容器应该在你的应用程序运行之前知道所有这些对象,所以如果你更新对象,然后想在你的应用程序的某个其他区域引用它们,这听起来像是某种反模式的服务定位器,在这种定位器中,您将到处从内核获取实例。除非我误解了什么,否则我很抱歉:)如果某个对象“已经实例化”,这意味着该对象不是由Ninject或在内核中创建的,那么这很难理解。目前我也不需要从任何地方访问IKernel,因为每个对象都被注入其所需的依赖项。我唯一要做的就是在主控台上(它是一个控制台应用程序)。。是do var process=kernel.Get();然后打电话,表演。。。这将从内核启动我的第一个对象实例,然后通过对象图注入其他每个实例。。。通过这些构造函数。很好,在什么情况下会有人绑定某个NinjectModule中尚未创建的实例?对我来说似乎有点奇怪,除非绑定在应用程序开始时由于某种原因无法完成,并且可能需要在其他地方进行一些欺骗。从未使用过。ToConstant,在困难的情况下似乎很有用:)嗨,patrick,我有一个对象的实例,它是由第三方组件在应用程序开始时提供给我的,这个实例填充了属性,如果我只是更新了这个对象或让一个ninject模块更新它,即使它是一个单例,我不会拥有所有正确的属性。但我愿意提出建议。我目前正在将我的对象传递给我创建的ninject模块的构造函数,并使用ninject根据nemesv注册than实例。这应该可以解决您的问题,因为Martin为您提供了一个很好的示例,说明了如何传递实例对象:)
var kernel = new StandardKernel();
kernel.Bind<MyClass>().ToMethod(context => myClassInstance).InSingletonScope();