【问题标题】:How to "bind" attribute to action filter using Autofac?如何使用 Autofac 将属性“绑定”到动作过滤器?
【发布时间】:2011-12-21 16:05:25
【问题描述】:

我有一个自定义授权过滤器,它具有构造函数注入的依赖项。

public class CustomAuthorizationFilter : IAuthorizationFilter

还有一个只保存数据的通用属性。

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
public class CustomAuthorizeAttribute : FilterAttribute

我从here“借来”的一种方法,我真的很享受这种分离。我了解过滤器是如何运行并“获取”属性的,但我在接线时遗漏了一些东西。

如何将属性“绑定”到过滤器,以便在属性存在时调用过滤器? Ninject 似乎有一个syntaxforthis。但我还没有找到 Autofac 中的等价物

如果这是我需要在 Autofac 之外的应用程序中设置的东西,那也没关系。

谢谢! 乔什

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 autofac action-filter filterattribute


    【解决方案1】:

    您可以使用相同的类作为过滤器和属性。但是您也可以定义另一个属性并检查它是否已定义。

    然后你必须注册你的过滤器/属性类:在Global.asax中,就像filters.Add(new HandleErrorAttribute());一样。

    在 filterMethods 内部(在您的情况下,应该是 OnAuthorize),您可以检查是否有其他属性 IsDefined 或是否定义了某些属性。

    【讨论】:

    • 所以你是说你需要将过滤器注册为一个全局过滤器,它将在每个请求上执行,然后作为执行检查的一部分来查看是否定义了另一个属性?跨度>
    • 就是这样。据我了解。
    • 好的,我确实试过了,但我并不热衷于执行每个请求。我能够重构一些东西以避免需要 DI,此时我将过滤器和属性折叠在一起,但我更愿意将它们分开。所以你不知道任何类似于 Ninject 的 autofac 语法?
    • 我认为过滤器,即使是全局配置的,也只会为那些已经被注释的控制器类或方法运行。默认的[Authorize] 属性以这种方式工作。如果您在属性类中需要 DI,可以查看 here
    • 在我自己的测试中,全局过滤器会在每个请求上触发。 [Authorize] 属性的工作方式不同,因为它既是过滤器又是属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多