Ninject 'Get' 方法可以缓存值吗?
Can Ninject 'Get' method cache value?
当我使用 Ninject
创建 MyClass 时:
var myClass=kernel.Get<MyClass>();
我调用时 Ninject
是否创建新对象(或 returns 旧对象)?:
var myClass1=kernel.Get<MyClass>();
因此,Ninject 创建了两个对象:
if(myClass!=myClass1) //true
{}
但是我可以通过 Ninject 获取缓存对象吗?
查看 Ninject Object Scopes 了解更多信息。
例如,如果你只需要一个类型的对象,你可以在 SingletonScope
:
中注册它
kernel.Bind<Shogun>().ToSelf().InSingletonScope();
还有其他作用域变化。如果您正在使用 ASP.NET
,您很可能希望在 RequestScope
中注册和缓存您的对象。或者您始终可以为高级缓存规则创建自定义范围。
您似乎要寻找的是范围。
请参考Ninject documentation
中的相应部分
Ninject makes it easy to re-use instances that are already created,
without having to implement anything via code. All you need to do is
tell Ninject to Bind the class in a singleton scope.
There are four built-in scopes available in Ninject, and a number of
others delivered via Extensions...
当我使用 Ninject
创建 MyClass 时:
var myClass=kernel.Get<MyClass>();
我调用时 Ninject
是否创建新对象(或 returns 旧对象)?:
var myClass1=kernel.Get<MyClass>();
因此,Ninject 创建了两个对象:
if(myClass!=myClass1) //true
{}
但是我可以通过 Ninject 获取缓存对象吗?
查看 Ninject Object Scopes 了解更多信息。
例如,如果你只需要一个类型的对象,你可以在 SingletonScope
:
kernel.Bind<Shogun>().ToSelf().InSingletonScope();
还有其他作用域变化。如果您正在使用 ASP.NET
,您很可能希望在 RequestScope
中注册和缓存您的对象。或者您始终可以为高级缓存规则创建自定义范围。
您似乎要寻找的是范围。 请参考Ninject documentation
中的相应部分Ninject makes it easy to re-use instances that are already created, without having to implement anything via code. All you need to do is tell Ninject to Bind the class in a singleton scope.
There are four built-in scopes available in Ninject, and a number of others delivered via Extensions...