我碰壁了,希望有人能指出我哪里出错了。
我一直在使用 Ninject 注入(inject)自定义 ActionFilterAttributes,效果很好:
kernel.BindFilter<CriticalErrorAttribute>(FilterScope.Last, 1);
我现在正在尝试注入(inject)自定义的 AuthorizeAttribute。我的语法正确,因此我可以插入角色和自定义属性:
kernel.BindFilter<Authorisation>(FilterScope.Action, 0)
.WhenActionMethodHas<Authorisation>()
.WithPropertyValueFromActionAttribute<Authorisation>("Roles", n => n.Roles)
.WithPropertyValueFromActionAttribute<Authorisation>("Years", n => n.Years);
该属性正在正确执行,并且角色和年份插入得很好,我的问题是我尝试注入(inject)的服务始终为空:
[Inject]
public IUserServices userService { get; set; }
在正常的 ActionFilterAttributes 中,服务注入(inject)得很好,但这里却不是。
如有任何帮助,我们将不胜感激
最佳答案
您应该实现相应的接口(interface),而不是从属性派生,例如IAuthorizationFilter
或 IActionFilter
并使用不同的普通属性来标记要应用该过滤器的 Controller 或操作
public class AuthorisationFilter : IAuthorizationFilter ....
public class Authorization : Attribute ....
kernel.BindFilter<AuthorisationFilter>(FilterScope.Action, 0)
.WhenActionMethodHas<Authorisation>()
.WithPropertyValueFromActionAttribute<Authorisation>("Roles", n => n.Roles)
.WithPropertyValueFromActionAttribute<Authorisation>("Years", n => n.Years);
关于asp.net-mvc-3 - Ninject 自定义 AuthorizeAttribute 注入(inject)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9115246/