我正在尝试以下操作:
自定义属性:
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));
但是不幸的是它无法建立。当我在custom属性中创建一个空的构造函数时,我可以对其进行构建,但是在覆盖的AuthorizeCore
方法中,我尝试调用该服务为null(带有断点,在调试两个构造函数时都可以看到断点,并且Roles属性是填写。
在进行调查时,我读到了有关KernelContainer的用法,但在Ninject 3(它存在于2.2中)中被废弃了。
除了第一个接口外,我还要注入另外三个接口,我该如何通过呢?
这是正确的方法还是应该使用属性注入?
更新:我决定不再采用这种方法。