如何确保只使用一个实例的InSingletonScope

时间:2015-09-14 19:08:05

标签: c# singleton ninject

我希望在我的代码中只有一个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();
    }
}

2 个答案:

答案 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();
}