如果不使用像PostSharp这样的库,有没有办法设置一个我可以有逻辑的自定义属性,当附加到方法时,会执行PRIOR进入该方法吗?
答案 0 :(得分:5)
没有;归因不是为了注入代码。像postharp这样的工具可以用烟雾和镜子来解决这个问题,但没有这个:没有。另一种选择可能是装饰模式, 也许动态地实现一个接口(通过任何方式都不是微不足道的)。但是,在方法的顶部添加实用程序方法调用更多更简单,并且可能很好,因为如果您有权访问添加属性,则可以添加方法调用。< / p>
或换句话说:像postharp这样的工具存在正确,因为这不是现成的。
// poor man's aspect oriented programming
public void Foo() {
SomeUtility.DoSomething();
// real code
}
在某些情况下,子类化可能很有用,特别是如果子类是在运行时完成的(元编程):
class YouWriteThisAtRuntimeWithTypeBuilder : YourType {
public override void Foo() {
SomeUtility.DoSomething();
base.Foo();
}
}