我正在为 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/