有没有拦截类的方法调用所以你可以做AOP?
e.g。
我希望Teacher.Talk()在两种情况下的表现不同:
class School
{
[Fun]
public void Picnic {
Teacher t = new Teacher();
t.Talk();
}
public void Seminar{
Teacher t = new Teacher();
t.Talk();
}
}
在上面的代码中,Picnic函数由Fun属性修饰,因此教师的Talk功能比没有属性修饰的Seminar函数更有趣。
我已经检查过Castle.DynamicProxy,但是它使用代理类并需要修改一些代码。这无助于解决我的问题,因为我想使用该属性来进行配置,因此当决策发生变化时,将需要很少的代码修改。
提前多多感谢!
答案 0 :(得分:1)
几个月前研究了同样的问题后,我找到的唯一合适的解决方案就是使用PostSharp。 http://www.sharpcrafters.com/
即便这样也不理想,因为它在使用属性(给予或接受)的类中禁用编辑/继续。
答案 1 :(得分:1)
有两种基本方法:创建子类代理或修改代码,即“编译时编织”,以便将钩子输入到已编译的程序集中。
Subclassing只允许你拦截虚方法和构造函数,而编译时编织可以在任何地方进入钩子来拦截代码库中的调用。