utilizar tipos qué que patron manejo inyección inyeccion injection desventajas dependency dependencias cuales consideras casos apropiado c# asp.net-mvc-3 ninject webactivator

tipos - patron de inyeccion de dependencias c#



Ninject y MVC3: inyección de dependencia para filtros de acción (2)

Aquí es cómo podría proceder:

public class MvcApplication : Ninject.Web.Mvc.NinjectHttpApplication { private class MyModule : NinjectModule { public override void Load() { Bind<IService>().To<ServiceImpl>(); Bind<IAuthenticationHelper>().To<AuthenticationHelperImpl>(); } } public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); } public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); } protected override void OnApplicationStarted() { AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); } protected override IKernel CreateKernel() { var modules = new INinjectModule[] { new MyModule() }; var kernel = new StandardKernel(modules); DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel)); return kernel; } }

y luego podría tener su atributo de autorización personalizado:

public class CustomAuthorizeAttribute : AuthorizeAttribute { [Inject] public IService Service { get; set; } [Inject] public IAuthenticationHelper AuthenticationHelper { get; set; } public override void OnAuthorization(AuthorizationContext filterContext) { } }

y un controlador de acción decorado con él:

[CustomAuthorize] public ActionResult Index() { return View(); }

y las dependencias deben ser inyectadas.

He encontrado un montón de artículos no concluyentes y preguntas sobre cómo realizar la inyección de propiedades en un ActionFilter en ASP.NET MVC3 usando Ninject.

¿Podría alguien darme un ejemplo claro por favor?

Aquí está mi atributo de autenticación personalizado.

public class CustomAuthorizeAttribute : AuthorizeAttribute { [Inject] public IService Service { get; set; } [Inject] public IAuthenticationHelper AuthenticationHelper { get; set; } public override void OnAuthorization(AuthorizationContext filterContext) { //My custom code } }

Estoy usando el activador web para configurar Ninject

[assembly: WebActivator.PreApplicationStartMethod(typeof(MyProject.Web.AppStart_NinjectMvc3), "Start")] namespace MyProject.Web { public static class AppStart_NinjectMvc3 { public static void RegisterServices(IKernel kernel) { //Binding things } public static void Start() { // Create Ninject DI Kernel IKernel kernel = new StandardKernel(); // Register services with our Ninject DI Container RegisterServices(kernel); // Tell ASP.NET MVC 3 to use our Ninject DI Container DependencyResolver.SetResolver(new NinjectServiceLocator(kernel)); } } }

Mi servicio y ayudante nunca son inyectados. ¿Qué necesito cambiar?