Asp.net mvc 如何";绑定";使用Autofac将属性设置为动作过滤器?

Asp.net mvc 如何";绑定";使用Autofac将属性设置为动作过滤器?,asp.net-mvc,asp.net-mvc-3,autofac,action-filter,filterattribute,Asp.net Mvc,Asp.net Mvc 3,Autofac,Action Filter,Filterattribute,我有一个自定义授权筛选器,它具有构造函数注入依赖项 public class CustomAuthorizationFilter : IAuthorizationFilter 和一个仅保存数据的通用属性 [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false, Inherited = false)] public class CustomAuthorizeAttribute

我有一个自定义授权筛选器,它具有构造函数注入依赖项

public class CustomAuthorizationFilter : IAuthorizationFilter
和一个仅保存数据的通用属性

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
public class CustomAuthorizeAttribute : FilterAttribute
一种我“借用”的方法,我真的很享受这种分离。我理解过滤器如何运行并“获取”属性,但我缺少了一些与连线有关的东西

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

如果这是我需要在Autofac之外的应用程序中设置的内容,也可以

谢谢!
Josh

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

然后必须注册过滤器/属性类:在
Global.asax
内部,就像
filters.Add(newhandleerrorattribute())一样


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

所以您是说您需要将筛选器注册为全局筛选器,它将在每个请求时执行,然后作为执行检查的一部分,检查是否定义了另一个属性?就是这样。据我所知。好吧,我确实试过了,但我不喜欢它执行每个请求。我能够重构一些东西以避免需要DI,在这一点上,我将过滤器和属性折叠在一起,但我更愿意将它们分开。所以你不知道有任何autofac语法类似于Ninject的东西吗?我认为过滤器,即使是全局配置的,也只会对那些已经注释的控制器类或方法运行。默认的
[Authorize]
属性就是这样工作的。如果您在属性类中需要DI,您可以查看我自己的测试,全局过滤器会在每个请求中启动。
[Authorize]
属性的工作方式不同,因为它既是一个过滤器又是一个属性。