设置依赖注入的过滤器属性以接受构造函数中的参数

2023-11-22

我正在遵循 ninject 过滤器属性设置page.

对于他们来说,他们有:

.WithConstructorArgumentFromControllerAttribute<LogAttribute>(
      "logLevel", attribute => attribute.LogLevel);

第二个参数需要一个Func<LogAttribute, object> callback。他们的实际参数列表设置如下:

Log(LogLevel = Level.Debug)

但我的过滤器属性设置如下:

public class AuthAttribute : FilterAttribute { }

public class AuthFilter : IAuthorizationFilter
{

    private readonly IUserService userService;
    private string[] roles;

    //Stuck on the constructor also. How do I accept params?
    public AuthFilter(IUserService userService, params string[] roles)
    {
        this.userService = userService;
        this.roles = roles;
    }
    public void OnAuthorization(AuthorizationContext filterContext)
    {
        throw new NotImplementedException();
    }
}

不知怎的,这是错误的。因为我希望我的过滤器看起来像:

[Auth("Admin", "Contrib")]

我的绑定:

 kernel.BindFilter<AuthFilter>(FilterScope.Controller, 0)
            .WhenControllerHas<AuthAttribute>()
            .WithConstructorArgumentFromControllerAttribute<AuthAttribute>("roles", /*Stuck here*/)

您需要将角色设置为属性中的属性。

属性:

public class AuthAttribute : FilterAttribute 
{ 
  public string[] Roles { get; set; }

  public AuthAttribute(params string[] roles)
  {
      this.Roles = roles;
  }
}

Filter:

public class AuthFilter : IAuthorizationFilter
{

  private readonly IUserService userService;
  private readonly string[] roles;

  public AuthFilter(IUserService userService, string[] roles)
  {
    this.userService = userService;
    this.roles = roles;
  }

  public void OnAuthorization(AuthorizationContext filterContext)
  {
    //do stuff
  }
}

控制器

   [AuthAttribute("a", "b")]
   public class YourController : Controller 
   {

   }

Binding:

kernel.BindFilter<AuthFilter>(FilterScope.Controller, 0)
            .WhenControllerHas<AuthAttribute>()
            .WithConstructorArgumentFromControllerAttribute<AuthAttribute>("roles", attribute => attribute.Roles);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设置依赖注入的过滤器属性以接受构造函数中的参数 的相关文章

随机推荐

  • 如何使用 jQuery AJAX $.post 存储 PHP $_SESSION 变量?

    Help 我在努力使用 AJAX 为我工作时遇到了麻烦 我有一个分页图库 每个图像下方都有复选框 如果用户在页面之间移动 我需要将复选框值存储在会话变量中 因此当他们随时提交表单时 它将包含所有页面上的所有选中值 我正在使用这个 jQuer
  • 如何查找多列中的重复项?

    所以我想做一些像下面这样的sql代码 select s id s name s city from stuff s group by s name having count where city and name are identical
  • Python如何使用defaultdict fromkeys生成具有预定义键和空列表的字典

    这是代码 from collections import defaultdict result defaultdict fromkeys a b c list result a append 1 TypeError Traceback mo
  • 将文件从 Jenkins 工作区提交到 SVN

    我在 Subversion 存储库中有一个保存的项目 并使用 Jenkins 对其进行编译 当我运行构建时 Jenkins 将项目拉入工作区目录 我需要将一个已更改的文件从 Jenkins 工作区提交到 Subversion 我该怎么做 谢
  • 如何使用Java从Sqlite3数据库中获取解析后的数据?

    我通过使用 POJO 为我的方法创建模型 从 sqlite3 DB 获取数据 在数组列表中检索数据时 我收到日期解析错误 日期在 sqlite3 DB 中定义为时间戳 在编译时会抛出 无法解析的日期 2015 05 21 12 41 56
  • Xcode 命令行工具 - 如何在终端中运行?

    当您在 Xcode 中创建命令行工具项目时 您会在 main m 中看到以下内容 import
  • 我们如何在 Fabric 1.0 中从另一个链码调用一个链码?如果有人有例子请分享

    我想从 Fabric 1 0 中的另一个链代码调用一个链代码 所以我有一些问题 1 我们可以在单个对等点上安装两个链码吗 2 如果我们在不同的对等点上安装两个链代码 我们如何调用另一个链代码 3 如果有人有示例 请分享 这应该很容易实现 下
  • Python 中的 sqlite3

    如何检查数据库文件是否已经存在 而且 如果它存在 我如何检查它是否已经有一个特定的表 要查看数据库是否存在 您可以sqlite3 connect到您认为包含数据库的文件 并尝试对其运行查询 如果是not数据库 你会得到这个错误 gt gt
  • 对并发软件进行单元测试 - 你做什么?

    随着软件变得越来越并发 您如何处理测试类型的核心行为与您的单元测试 不是并行行为 只是核心行为 在过去的美好时光 你有一个类型 你可以调用它 然后检查它返回的内容和 或它调用的其他内容 如今 您调用一个方法 实际工作就会安排在下一个可用线程
  • 将 CQRS 命令直接传递给域对象

    TLDR 我正在为我的一个较大的项目实现 CQRS DDD 解决方案 并且我想知道是否有任何真正的原因导致我的命令处理程序无法以较小的方式将命令对象直接分派到我的聚合在少数情况下 命令对象的数据丰富吗 我找不到任何具体原因说明为什么这是一种
  • 未初始化的对象与初始化为 NULL 的对象

    我在 Java 工作 我通常这样设置一些对象 public class Foo private SomeObject someName do stuff public void someMethod if this someName nul
  • 如何使用 Kubernetes Go 库创建一个简单的客户端应用程序?

    我正在努力使用 Kubernetes Go 库 文档 至少我找到的那些 与库本身相比似乎已经过时了 由于导入问题 所提供的示例无法构建 我只是想做一些简单的事情 按名称获取服务对象并打印一些属性 如nodePort 我只需要一个简单的库使用
  • 更新数据库源后,如何让 Visual Studio 2010 刷新我的数据集?

    我已将新列添加到现有列MS Access 2010我已连接的数据库Visual Studio 2010 更新数据库后 数据源窗口和DataSet没有新列 我查看了诸如此类的答案 Visual Studio 数据集设计器刷新表 但是使用 SE
  • 如何构建发布的 vscode 版本

    这个问题是针对开源 vscode 符合 MIT 许可证 而不是 VS Code 我昨天花了很多时间试图找出如何构建某种发行版本 我的意思是 就像在 Visual Studio 中一样 我们有 调试 和 发布 构建 我是C 开发人员 vsco
  • 我想在android的日历中选择多个日期

    我想在日历中选择多个日期 多个选择工作正常 但在 toast 中仅显示单个日期 第一个日期 如果我选 择 4 天 1 8 14 到 4 8 14 所有日期都应显示在 toast 中 这是我的代码 public class SampleTim
  • 使用 UIWebview 的 IP 摄像机流适用于 IOS 5,但不适用于 IOS 6

    您好 我在我的网站上流式传输 ip 摄像机 并将我的网站嵌入到 UIWebview 上 在 IOS 5 上工作正常 但当我在 IOS 6 上打开我的应用程序时 仅显示图像而不是视频 在我的网站上我使用请有人帮助我 还有其他方法吗 如果你想在
  • 如何从 iOS 应用程序打开 VPN? (私有 API 可以)

    不幸的是 当 iOS 设备进入 睡眠模式 时 即使已配置的 VPN 也会被关闭 一位客户想要为他的 iPad 安装应用程序has使用VPN是为了安全 所以任何事情都必须通过VPN来完成 该应用程序必须进行大量同步 但 iOS 设备可能会自行
  • 为静态方法设置 AspectJ 建议

    我用原始的切入点和建议方法编写了简单的方面 Aspect public class MyAspect Pointcut execution static com mtag util SomeUtil someMethod public vo
  • 如何在 Perl、DBI 中显示查询时间?

    我使用 Perl 和 DBI 来管理我的 MySQL 表 查询等 如何显示查询的运行时间 如果我在控制台中执行 SELECT 操作 结果将如下所示 id name 1 Jack 2 Joe 3 Mary 3 rows in set 0 17
  • 设置依赖注入的过滤器属性以接受构造函数中的参数

    我正在遵循 ninject 过滤器属性设置page 对于他们来说 他们有 WithConstructorArgumentFromControllerAttribute