Ninject and MVC3: Dependency injection to action filters

前端 未结 2 2079
小蘑菇
小蘑菇 2020-12-08 04:59

I\'ve found loads of inconclusive articles and questions on how to do property injection on an ActionFilter in ASP.NET MVC3 using Ninject.

Could someone give me a cl

2条回答
  •  执念已碎
    2020-12-08 05:46

    Here's how you could proceed:

    public class MvcApplication : Ninject.Web.Mvc.NinjectHttpApplication
    {
        private class MyModule : NinjectModule
        {
            public override void Load()
            {
                Bind().To();
                Bind().To();
            }
        }
    
        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;        
        }
    }
    

    and then you could have your custom authorize attribute:

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

    and a controller action decorated with it:

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

    and the dependencies should be injected.

提交回复
热议问题