在不使用像 PostSharp 这样的库的情况下,有没有一种方法可以设置一个自定义属性,当附加到一个方法时,我可以有逻辑,将在进入该方法之前执行?
最佳答案
没有; attributed 不是为了注入(inject)代码。像 postsharp 这样的工具通过烟雾和镜子来解决这个问题,但如果没有它:没有。另一种选择可能是装饰器模式, 也许动态地实现一个接口(interface)(无论如何都不是微不足道的)。但是,在方法顶部添加实用程序方法调用很多更简单,而且可能很好,因为如果您有权添加属性,您就有权添加方法调用。
或者换句话说:像 postsharp 这样的工具存在恰恰是因为它不是开箱即用的。
// poor man's aspect oriented programming
public void Foo() {
SomeUtility.DoSomething();
// real code
}
在某些情况下,子类化可能很有用,特别是如果子类是在运行时完成的(元编程):
class YouWriteThisAtRuntimeWithTypeBuilder : YourType {
public override void Foo() {
SomeUtility.DoSomething();
base.Foo();
}
}
关于c# - 有没有办法将属性应用于首先执行的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9605031/