public class AuthorizeUserAttribute : AuthorizeAttribute
{
private readonly IUserCodeService _userCodeService;
public AuthorizeUserAttribute(IUserCodeService userCodeService)
{
_userCodeService = userCodeService;
}
在我的控制器上,我像这样使用它:
[AuthorizeUser(Roles = "001, 002")]
public class ChallengesController : Controller
在Ninject我试着这样做:
kernel.Bind<IUserCodeService>().ToConstructor(_ => new WebsealUserCodeService(string.Empty));
kernel.BindFilter<AuthorizeUserAttribute>(FilterScope.Controller, 0)
.WithConstructorArgumentFromControllerAttribute<AuthorizeUserAttribute>("userCodeService", _ => new WebsealUserCodeService(string.Empty));
但不幸的是,它未能建立。当我在自定义属性中创建一个空构造函数时,我可以构建它,但是当在
AuthorizeCore
方法,我尝试调用它为null的服务(在调试两个构造函数时可以看到断点,并且填充了Roles属性)。
在做调查时,我读到关于KernelContainer的用法,但是它在Ninject 3中被丢弃了(它存在于2.2中)。
这是正确的方法还是应该改用属性注入?