zoukankan      html  css  js  c++  java
  • 利用消息机制实现.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组装接收器链来完成。
  • 相关阅读:
    Pro ASP.NET MVC 3 Framework 译文(一)
    Pro ASP.NET MVC 3 Framework译文(二)第二章:准备工作
    新写的JS无限树状列表
    Windows phone中如何使用丰富的弹出框提示
    Windows phone中用RichTextBox实现文字、图片混合排版
    Windows phone中如何添加页面跳转动画
    java虚拟机JVM内存不够,OutOfMemorry Error
    Oracle常用的导入导出命令
    Oracle经常断开连接
    安装oracle后,很卡
  • 原文地址:https://www.cnblogs.com/think/p/470036.html
Copyright © 2011-2022 走看看