我希望在我的代码中只有一个foo实例,但每次创建新实例时都会使用此配置,并且每次检查构造函数时都会检查它,我无法理解为什么。
public sealed class foo: Ifoo
{
public string Test { get; set; }
public foo()
{
this.Test = "test";
}
}
我的容器就像这样
public class DefaultNinjectModule : NinjectModule
{
public override void Load()
{
this.Bind<foo>().ToSelf().InSingletonScope();
}
}
答案 0 :(得分:0)
告诉Ninject在单例范围内绑定类:
kernel.Bind<foo>().ToSelf().InSingletonScope();
此行为仅适用于请求的实例 内核。
在您的情况下,DefaultNinjectModule(this
)&amp;不是内核。
在DefaultNinjectModule中创建标准内核实例
var kernel = new StandardKernel();
kernel.Bind<foo>().ToSelf().InSingletonScope();
查看此链接以供参考&amp;定制: Object scopes
答案 1 :(得分:0)
您应该将界面绑定到您的班级:
public override void Load()
{
this.Bind<Ifoo>().To<foo>().InSingletonScope();
}
然后当你想要foo时,你会使用:
kernel.Get<Ifoo>();
这将为您提供foo的单个实例。
注意:如果您有一个派生自IDisposable的实例类,则必须处置您的单个实例,Ninject不会为您执行此操作。在你的卸载中做:
public override void Unload()
{
this.Kernel.Get<Ifoo>().Dispose();
base.Unload();
}