为了账号安全,请及时绑定邮箱和手机立即绑定

Asp.net MVC的具有Ninject和Filter属性的依赖注入

Asp.net MVC的具有Ninject和Filter属性的依赖注入

大话西游666 2019-12-16 11:12:39
Asp.net MVC的具有Ninject和Filter属性的依赖注入我正在为asp.net mvc 3写一个自定义的授权过滤器。我需要向类中注入一个用户服务,但是我不知道该怎么做。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进行依赖项注入。我不想使用“工厂”或“服务定位器”模式。我的绑定在global.acsx中看起来像这样:    internal class SiteModule : NinjectModule    {        public override void Load()        {            Bind<IUserService>().To<UserService>();        }    }
查看完整描述

4 回答

?
米脂

TA贡献1836条经验 获得超3个赞

如果要使用构造函数注入,则需要创建一个属性和一个过滤器。


///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" } });

          }

      }

}

捆绑:


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

控制器:


[MyAuthorizeAttribute]

public class YourController : Controller

{


}

嗯...


查看完整回答
反对 回复 2019-12-16
?
动漫人物

TA贡献1815条经验 获得超10个赞

我为Ninject无法处理构造的任何情况找到了一个简单的解决方案:


var session = (IMyUserService)DependencyResolver.Current.GetService(typeof (IMyUserService));

实际上,这正是我与自定义AuthorizeAttribute一起使用的内容。比必须实现单独的FilterAttribute容易得多。


查看完整回答
反对 回复 2019-12-16
  • 4 回答
  • 0 关注
  • 541 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信