Estoy usando el complemento ninject mvc3 con mi aplicación web api. Me tendrá un borde que se parece a:El enlace de Singleton Scope no funciona según lo previsto
kernel.Bind<IFoo>().To<Foo>().InSingletonScope();
Es mi interpretación de que el meollo creará exactamente una instancia de Foo
y volver a utilizarlo adecuadamente. Al poner un punto de interrupción en el constructor Foo
, puedo ver claramente que se llama una vez por solicitud, y no puedo explicar por qué.
Mi única suposición es que de alguna manera se está creando un kernel nuevo por solicitud, pero ese no parece ser el caso, ya que el método CreateKernel
que establece el resolvedor de dependencias global solo se ejecuta una vez en la vida de la aplicación.
estoy usando un código tomado de this post hacer ninject jugar bonito con MVC 4. Debido a los cambios estructurales, que tenía que hacer una envoltura adicional que le asigno a 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());
}
}
¿Qué estoy haciendo ¿incorrecto?
Tal vez no relacionado con tema de captncraig, pero relevante para el título. Tuve el mismo problema y resultó que accidentalmente estaba inyectando la implementación en uno de mis objetos en lugar de la interfaz. Entonces, en el constructor, accidentalmente puse Foo en lugar de IFoo. Espero que esto ayude a alguien por ahí ... –