asp.net-mvc-3 - Ninject 自定义 AuthorizeAttribute 注入(inject)不起作用

标签 asp.net-mvc-3 filter ninject authorize-attribute

我碰壁了,希望有人能指出我哪里出错了。

我一直在使用 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),而不是从属性派生,例如IAuthorizationFilterIActionFilter 并使用不同的普通属性来标记要应用该过滤器的 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/

相关文章:

c# - 从代码隐藏在 MVC 中生成 Url

asp.net-mvc-3 - 模型验证以仅允许文本框中的字母字符

javascript - 从angularJs中的日期时间字符串获取日期?

spring-security - 多个 WebSecurityConfigurerAdapter 冲突问题

compact-framework - 当具体类型派生自抽象基类时,Ninject 无法解析接口(interface)类型

c# - C#-使用依赖项注入(inject)(ninject)代替工厂模式

c# - Ninject 的 Httpcontext.Session 始终为 null

asp.net-mvc - 是否可以用另一个值更改 url 路由参数

visual-studio-2010 - 使用 Web 部署 - 权限

filter - 使用 FFmpeg 仅增强图像的一部分的对比度?