• 利用消息机制实现.NET AOP(面向方面编程) --三种实现代码下载及说明



    文件下载

    文件说明:
    1、压缩文件包含一个VS2005工程,内含四个项目。
    2、第一个项目为DotNetAOP.SingleRealProxy,为使用RealProxy和ProxyAttribute实现的简单AOP实现
    3、第二个项目为DotNetAOP.NestedRealProxy,为使用嵌套RealProxy实现多个消息截获后利用代理多处对消息进行处理,但由于一个对象有两个RealProxy会出异常,所以这个实现是不成功的,不过有兴趣的朋友可以对它进行少量修改,通过委拖或自定义的消息接收器来完成消息处理链。
    4、第三个项目为DotNetAOP.MessageSinkWithRealProxy,为使用RealProxy调用MessageSink链来实现对消息附加多个关注者链。具体实现如下:
    a) Framework目录下为链式消息处理框架
    b)TerminatorSink.cs为消息链的终结器,它需要提供一个Delegate来最终调用堆栈结构。
    c)AOPProxyAttribute.cs继承自ProxyAttribute,在它的CreateInstance方法中,我们返回一个被MssageChainProxy代理的对象。
    d)ObjectWithAspect.cs为需要AOP功能的类的基类,它从ContextBoundObject继承,并被应用了AOPProxyAttribute,这样就会使得它的对象自动被MessageChainProxy代理。
    e)AspectAttribute.cs为所有要注入的Aspect的基类,它是静态类,需要子类提供CreateAspectSink方法。
    f)MessageChainProxy.cs是最重要的类,它从RealProxy继承,其Invoke方法根据应用在对象身上的AspectAttribute构建一个以TerminatorSink结束的消息处理链,这样就使得多个Aspect得以一个接一个的处理消息。而且它实现了TerminatorSink所需的Delegate,完成与内存堆栈的交互。
    g)Demo目录下为应用代码,实现一个处理器需要两个类,一个继承自IMessgeSink类,在SyncProcessMessage方法中实现对功能注入;还需要一个AspectAttribute的实现类,用于给MessageChainProxy提供MessageSink。我已经实现了两组处理器,可以以此为模板加入自定义功能的处理器。
    5、第四个项目为DotNetAOP.ServerContextSink,为使用四种上下文接收器中的ServerContextSink来实现对消息附加多个关注者链。实现思路和上一项目类似,只是Sink注入通过继承自ContextAttribute的ObjectSinkChainAttribute建立新的上下文属性ServerContextSinkChainProperty,再由ServerContextSinkChainProperty组装接收器链来完成。
  • 相关阅读:
    关于Monitor和lock的锁操作 笔记
    模型/数据验证(System.ComponentModel.DataAnnotations)笔记
    NSIS 打包操作
    关于IE和非IE浏览器的一些差异笔记
    Wpf 字典触发器
    关于MongoDB在C#的使用
    Apache JMeter
    关于在移动端方面的css应用
    关于csc.exe
    增量运算符+=和*=的原理与不可变序列增量运算效率低的原因
  • 原文地址:https://www.cnblogs.com/think/p/470036.html
Copyright © 2020-2023  润新知