构造函数注入到自定义属性中

时间:2018-08-06 17:24:51

标签: asp.net-mvc ninject.web.mvc

我正在尝试以下操作:

自定义属性:

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中)中被废弃了。

除了第一个接口外,我还要注入另外三个接口,我该如何通过呢?

这是正确的方法还是应该使用属性注入?

更新:我决定不再采用这种方法。

0 个答案:

没有答案