Jof*_*sey 4 .net c# aop attributes
我在PostSharp库中创建了OnMethodBoundaryAspect属性.它可以拦截进入和退出方法,如下所示:
[Serializable]
[MulticastAttributeUsage(MulticastTargets.Method, Inheritance = MulticastInheritance.Multicast)]
public class InterceptAttribute : OnMethodBoundaryAspect
{
public override void OnEntry(MethodExecutionArgs args)
{ }
public override void OnExit(MethodExecutionArgs args)
{ }
}
public class A
{
[Intercept]
public void foo() { }
}
Run Code Online (Sandbox Code Playgroud)
我的问题是"它是如何运作的?" 我该怎么做才能编写自己的属性,能够拦截进入和退出方法(没有PostSharp使用ofcourse)?
首先,我建议阅读以下内部工作文档("它是如何工作"部分和其他部分).基本上,属性在构建时被转换为相关代码(实际上,主要是在构建之后但仍在构建时).MSBuild任务的概念指定了在构建过程中要运行的代码.代码在编译完成后执行,并查找特定属性(如InterceptAttribute),并可对已编译的代码执行更改.使用Mono.Cecil库时可以执行对代码的运行时编辑(它允许注入/删除IL代码).再次,澄清一下:
我建议查看KindOfMagic代码,看看自动将INotifyPropertyChanged的RaisePropertyChanged作为属性实现.它提供了有关创建自定义方面的宝贵见解,尽管它可能是艰难而乏味的过程.
| 归档时间: |
|
| 查看次数: |
3739 次 |
| 最近记录: |