Inyección de dependencia de inyección en MVC3 - Fuera de un controlador
Estamos usando Ninject en nuestro proyecto MVC3 para hacer una inyección de dependencia. Usé NuGet para agregar referencias de paquetes a los paquetes Ninject y Ninject.MVC3. Cuando hice esto, creó una clase NinjectMVC3 en mi carpeta App_Start:
public static class NinjectMVC3
{
private static readonly Bootstrapper bootstrapper = new Bootstrapper();
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestModule));
DynamicModuleUtility.RegisterModule(typeof(HttpApplicationInitializationModule));
bootstrapper.Initialize(CreateKernel);
}
public static void Stop()
{
bootstrapper.ShutDown();
}
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
RegisterServices(kernel);
return kernel;
}
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<IPrincipal>().ToMethod(c => HttpContext.Current.User);
}
}
Hasta ahora, esto ha funcionado muy bien para resolver dependencias en mis controladores:
public class HomeController : Controller {
protected IPrincipal principal { get; set; }
public HomeController(IPrincipal principal) {
this.principal = principal;
}
}
Este controlador tiene una dependencia de IPrincipal que he configurado en mi clase bootstrapper para resolver en HttpContext.Current.User. Tengo otra clase que depende de IPrincipal que no es un controlador:
public class NonControllerClass
{
protected IPrincipal Principal { get; set; }
public NonControllerClass(IPrincipal principal) {
}
}
¿Cómo haría para resolver esta dependencia? ¿Cómo lo haría si no fuera un parámetro del constructor? }