代码之家  ›  专栏  ›  技术社区  ›  Kris van der Mast

构造函数注入自定义属性

  •  1
  • Kris van der Mast  · 技术社区  · 6 年前

    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中)。

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

    0 回复  |  直到 6 年前
    推荐文章