asp.net-mvc - asp.net mvc 的 Ninject 和 Filter 属性的依赖注入(inject)

标签 asp.net-mvc asp.net-mvc-3 ninject

我正在为 asp.net mvc 3 编写自定义授权过滤器。我需要将用户服务注入(inject)到类中,但我不知道如何执行此操作。

public class AuthorizeAttribute : FilterAttribute, IAuthorizationFilter
{
    private IUserService userService;
    private string[] roles;

    public AuthorizeAttribute(params string[] roles)
    {
        this.roles = roles;
    }

    public void OnAuthorization(AuthorizationContext filterContext)
    {
        throw new NotImplementedException();
    }
}

我正在使用 ninject 进行依赖注入(inject)。我不想使用工厂或服务定位器模式。

我的绑定(bind)在 global.acsx 中如下所示:

    internal class SiteModule : NinjectModule
    {
        public override void Load()
        {
            Bind<IUserService>().To<UserService>();
        }
    }

最佳答案

查看这个答案:Custom Authorization MVC 3 and Ninject IoC

如果您想使用构造函数注入(inject),那么您需要创建一个属性和一个过滤器。

/// Marker attribute
public class MyAuthorizeAttribute : FilterAttribute { }

/// Filter
public class MyAuthorizeFilter : IAuthorizationFilter
{
      private readonly IUserService _userService;
      public MyAuthorizeFilter(IUserService userService)
      {
          _userService = userService;
      }

      public void OnAuthorization(AuthorizationContext filterContext)
      {
          var validUser = _userService.CheckIsValid();

          if (!validUser)
          {
              filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "action", "AccessDenied" }, { "controller", "Error" } });
          }
      }
}

绑定(bind):

this.BindFilter<MyAuthorizeFilter>(System.Web.Mvc.FilterScope.Controller, 0).WhenControllerHas<MyAuthorizeAttribute>();

Controller :

[MyAuthorizeAttribute]
public class YourController : Controller
{
    // ...
}

关于asp.net-mvc - asp.net mvc 的 Ninject 和 Filter 属性的依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6193414/

相关文章:

asp.net-mvc - 在 asp.net mvc 中使用大量 View 模型是不好的做法吗

.net - 使用 Ninject 注入(inject) AutoMapper 依赖项

c# - Web API 和 MVC 的 Ninject 依赖解析

.net - Ninject 运行时上下文绑定(bind)

javascript - 无法读取未定义的 asp MVC Morris Chart 的属性 'match'

c# - .NET 导出到 excel - 不显示子行

asp.net-mvc - 如何检查 NHibernate 版本?

c# - jQuery 对话框中的 MVC3 数据未回传到服务器

c# - 在 ASP.net MVC 3 中的按钮上应用 CSS

c# - 无法解析符号 ObjectStateManager