Singleton Scope绑定不按预期工作

cap*_*aig 9 c# ninject asp.net-web-api

我在我的web api应用程序中使用ninject mvc3插件.我有一个看起来像这样的绑定:

kernel.Bind<IFoo>().To<Foo>().InSingletonScope();

我的解释是,核心将恰好创建一个实例Foo并适当地重用它.通过在Foo构造函数中放置断点,我可以清楚地看到每个请求都会调用一次,我无法解释原因.

我唯一的猜测是,每个请求都会以某种方式创建新内核,但事实并非如此,因为CreateKernel设置全局依赖项解析程序的方法只会在应用程序生命周期中运行一次.

我正在使用从这篇文章中获取的一些代码来使ninject在mvc 4中运行良好.由于框架更改,我必须创建一个我分配给它的附加包装器GlobalConfiguration.Configuration.DependencyResolver:

public class NinjectResolver : NinjectScope, IDependencyResolver
{
    private readonly IKernel _kernel;
    public NinjectResolver(IKernel kernel)
        : base(kernel)
    {
        _kernel = kernel;
    }
    public IDependencyScope BeginScope()
    {
        return new NinjectScope(_kernel.BeginBlock());
    }
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

cap*_*aig 5

我永远无法让它正常工作,我不知道为什么.我的猜测是它与MVC4集成有关,目前还有点不成熟.

作为替代方案,我正在使用:

kernel.Bind<IFoo>().ToConstant(new Foo());

这似乎有效,但我对它不太满意.