Ich verwende das ninject mvc3-Plugin mit meiner Web-API-Anwendung. Ich habe eine Bindung, die wie folgt aussieht:Singleton Scope-Bindung funktioniert nicht wie vorgesehen
kernel.Bind<IFoo>().To<Foo>().InSingletonScope();
Es ist meine Interpretation ist, dass die kernal genau eine Instanz von Foo
schaffen und sie in geeigneter Weise wiederverwenden. Indem ich einen Breakpoint in Foo
's Konstruktor einfüge, kann ich klar sehen, dass es einmal pro Anfrage aufgerufen wird, und ich kann nicht erklären, warum.
Meine einzige Vermutung ist, dass irgendwie ein neuer Kernel pro Anfrage erstellt wird, aber das scheint nicht der Fall zu sein, da die CreateKernel
Methode, die den globalen Abhängigkeitsresolver setzt, nur einmal in der Anwendungslebensdauer ausgeführt wird.
ich einige Code aus this post genommen bin mit machen schön ninject zu spielen mit mvc 4. Wegen der Rahmen ändert, hatte ich eine zusätzliche Hülle zu machen, die ich GlobalConfiguration.Configuration.DependencyResolver
zuweisen:
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());
}
}
Was mache ich falsch?
Vielleicht nicht im Zusammenhang mit captncraigs Problem, aber relevant für den Titel. Ich hatte das gleiche Problem und es stellte sich heraus, dass ich versehentlich die Implementierung in eines meiner Objekte und nicht in das Interface injizierte. Also hatte ich im Konstruktor versehentlich Foo anstelle von IFoo gesetzt. Hoffe, das hilft jemandem da draußen ... –