Ninject可以创建独立对象吗?

时间:2014-08-04 16:58:04

标签: dependency-injection singleton ninject

我需要实例化一个没有其他对象需要引用的对象,只要应用程序正在运行,我希望它能够存活。 它将使用其他服务,但没有其他人需要它的服务。

是否有可能让ninject在开始时创建一个这样的对象并将其保存在内存中,或者我是否需要将其存储在某个地方?如何设置ninject,它将创建我的实例并保持它直到退出?

如果是这样,您对此做法有何看法?

1 个答案:

答案 0 :(得分:1)

据我所知,ninject并不提供开箱即用的功能。 但是,当你做的时候

IBindingRoot.Bind<FooService>().ToSelf().InSingletonScope();

然后一个单一的获得:

IResolutionRoot.Get<FooService();

这足以使ninject保持相同的对象存活,直到内核被释放。 您无需保留参考。


您还可以使用DependencyCreation ExtensionFooService的生命周期与其他服务/对象联系起来。

像这样:

IBindingRoot.Bind<SomeSingletonWhichIsInstantiatedAtTheBeginning>().To<...>();
IBindingRoot.DefineDependency<SomeSingletonWhichIsInstantiatedAtTheBeginning, FooService>();
IBindingRoot.Bind<FooService>().ToSelf().InDependencyCreatorScope();

这导致FooService在实例化SomeSingletonWhichIsInstantiatedAtTheBeginning时被设置为SomeSingletonWhichIsInstantiatedAtTheBeginning,并且在OnActivation被处置/未引用时也被“处置”。

但是,要注意循环依赖!


另一种方法是使用IBindingRoot.Bind<FooService>().ToSelf().InSingletonScope(); IBindingRoot .Bind<SomeSingletonWhichIsInstantiatedAtTheBeginning>() .To<...>() .OnActivation((context, service) => ctx.Kernel.Get<FooService>()); 功能来实现与以前相同的功能:

FooService

这将SomeSingletonWhichIsInstantiatedAtTheBeginning的实例化与FooService的实例化联系起来,并在内核被释放时删除{{1}}。