Attribute的相同实例用于多个方法调用

时间:2017-12-13 13:17:43

标签: c# asp.net-mvc attributes action-filter

我在MVC中创建了一个Action Filter,我创建了一个继承自ActionFilterAttribute类的新Attribute,并实现了OnActionExecuted方法。然后我用这个新属性装饰了一个动作。当我第一次调用动作时,一切都很好,然后调用属性的构造函数,然后调用OnActionExecuted方法。当我第二次调用这个相同的动作时,我发现没有调用Attribute的构造函数,并且仍然保留了在Action的第一次调用期间设置的内部属性成员的状态,这显然意味着相同属性的实例用于对操作的所有调用。有没有办法强制每个属性调用的新实例?

1 个答案:

答案 0 :(得分:2)

将属性附加到类型,成员,参数等时,您将注释属性目标的元数据。在您的情况下,您将属性应用于方法,因此它将元数据级别附加到方法,而不是调用方法的实例。这意味着您将为应用它的每个方法获取一个新的属性实例,而不是为每个方法和定义目标方法的类的每个实例获取。

由于元数据没有可以更改的状态,因此该属性(如果使用正确)也没有更改状态。您无法更改属性的工作方式,因此您必须以不依赖于内部状态的方式实现属性。