3

我有一个 Web API 项目,我打算在其中使用继承自的属性ActionFilterAttribute以标准化方式进行日志记录。作为该日志记录的一部分,我想从HttpActionContextOnActionExecuting方法中提取一些值。然后,我想将这些称为OnActionExecuted. 我已经指定[AttributeUsage(AttributeTargets.Class)]对于这个属性。我的假设是我的自定义属性将与其应用的类一起实例化,并且与应用该属性的类具有相同的生命周期。我找不到任何具体支持这一点的东西。我做了一些测试,这似乎是它的工作原理,但我担心我的测试太有限了。我假设对同一个控制器的多次调用将生成该控制器的新实例,从而生成该属性的新实例。我基本上担心作为OnActionExcecuting.

任何人都知道可以确认或否认我的假设的任何资源或链接?

4

1 回答 1

4

这取决于你要使用什么。

Web API 中的属性(过滤器)被缓存(过滤器管道private readonly Lazy<Collection<FilterInfo>> _filterPipeline;仅初始化一次)。看这里

因此,如果您在属性的构造函数中初始化某些内容,它将在后续执行中保持不变。

但是,它HttpActionContext是为每个请求创建的HttpControllerContextHttpActionDescriptor然后传递给管道中的每个缓存过滤器。看这里

因此,即使过滤器的实例被重用,方法中上下文的值也是特定于特定请求的。

于 2013-09-27T07:23:01.567 回答