利用消息机制实现.NET AOP(面向方面编程)--通过RealProxy实现
来源:互联网 发布:同步带轮选型软件 编辑:程序博客网 时间:2024/05/22 06:20
利用消息机制实现.NET AOP(面向方面编程)--通过RealProxy实现
通过RealProxy是最简单的方法,缺点是不能同时加入多个代理,否则会抛异常。
实现步骤:
1、实现RealProxy的继承类
2、实现应用上述实现的RealProxy类的ProxyAttribute
3、把上述实现的Attribute应用到ContextBoundObject实例上
//MyProxy代码
using System;using System.Runtime.Remoting;using System.Runtime.Remoting.Messaging;using System.Runtime.Remoting.Proxies;using System.Runtime.Remoting.Activation;using System.Runtime.Remoting.Services;using System.Diagnostics;namespace DotNetAOP.UsingRealProxy{ class MyProxy:RealProxy { MarshalByRefObject _target = null; public MyProxy(Type type, MarshalByRefObject target):base(type) { this._target = target; } //覆写Invoke,处理RealProxy截获的各种消息, //此种方式最简捷,但不能截获远程对象的激活,好在我们并不是真的要Remoting public override IMessage Invoke(IMessage msg) { IMethodCallMessage call = (IMethodCallMessage)msg; IConstructionCallMessage ctr = call as IConstructionCallMessage; IMethodReturnMessage back = null; //构造函数,只有ContextBoundObject(Inherit from MarshalByRefObject)对象才能截获构造函数 if (ctr != null) { Console.WriteLine("调用"+ctr.ActivationType.Name+"类型的构造函数"); RealProxy defaultProxy = RemotingServices.GetRealProxy(_target); //如果不做下面这一步,_target还是一个没有直正实例化被代理对象的透明代理, //这样的话,会导致没有直正构建对象。 defaultProxy.InitializeServerObject(ctr); //本类是一个RealProxy,它可通过GetTransparentProxy函数得到透明代理 back = EnterpriseServicesHelper.CreateConstructionReturnMessage(ctr, (MarshalByRefObject)GetTransparentProxy()); } //MarshalByRefObject对象就可截获普通的调用消息, //MarshalByRefObject对象告诉编译器,不能将其内部简单的成员函数优化成内联代码, //这样才能保证函数调用都能截获。 else { Console.Write("调用成员函数:" + call.MethodName); back = RemotingServices.ExecuteMessage(_target, call); Console.WriteLine(",返回结果为:" + back.ReturnValue.ToString()); } return back; } }}
//MyProxyAttribute
using System;using System.Collections.Generic;using System.Text;using System.Runtime.Remoting.Proxies;namespace DotNetAOP.UsingRealProxy{ //从ProxyAttribute继承,自动实现RealProxy植入 [AttributeUsage(AttributeTargets.Class)] class MyProxyAttribute:ProxyAttribute { //覆写CreateInstance函数,返回我们自建的代理 public override MarshalByRefObject CreateInstance(Type serverType) { MarshalByRefObject obj = base.CreateInstance(serverType); MyProxy proxy = new MyProxy(serverType, obj); return (MarshalByRefObject)proxy.GetTransparentProxy(); } }}
//MyCBO代码
using System;using System.Collections.Generic;using System.Text;namespace DotNetAOP.UsingRealProxy{ [MyProxy] class MyCBO:ContextBoundObject { public int Add(int a, int b) { return a + b; } public int Divide(int a, int b) { return a / b; } }}
//测试代码
using System;using System.Collections.Generic;using System.Text;namespace DotNetAOP{ class Program { static void Main(string[] args) { UsingRealProxy.MyCBO cbo = new DotNetAOP.UsingRealProxy.MyCBO(); cbo.Add(1, 2); Console.ReadLine(); } }}
我曾试图实现多个RealProxy嵌套代理对象,不过最后以失败告终,不过后面的两个实现都是可以应用多个截获的。下载:嵌套RealProxy框架的简单实现 这个框架以失败告终,原因是一个对象不能有多个代理,奇怪的是RemotingProxy又可以,还有待研究。需要上面单个RealProxy实现的请留下Email。查看其它框架实现请转到此页
利用消息机制实现.NET AOP(面向方面编程)--通过RealProxy实现 利用消息机制实现.NET AOP(面向方面编程)--利用RealProxy和消息接收器实现多截获 利用消息机制实现.NET AOP(面向方面编程)--利用ServerContextSink实现多截获
posted @ 2006-07-26 18:49 THIN 阅读(2886) 评论(15) 编辑 收藏 所属分类: Other 、AOP
- 利用消息机制实现.NET AOP(面向方面编程)--通过RealProxy实现 zz
- 利用消息机制实现.NET AOP(面向方面编程)--通过RealProxy实现
- 利用消息机制实现.NET AOP(面向方面编程)
- .NET中通过代理实现面向方面编程(AOP)
- .NET中通过代理实现面向方面编程
- 实现MVC+AOP面向方面编程
- 实现MVC+AOP面向方面编程
- 面向切面编程(3):AOP实现机制
- 面向切面编程(3):AOP实现机制
- 继上次使用remoting实现了AOP,这次是通过RealProxy和ProxyAttribute实现
- AOP---面向方面编程
- AOP面向方面编程
- AOP 面向方面编程
- AOP面向方面编程
- AOP-面向方面编程
- AOP面向方面编程
- AOP面向方面编程
- AOP面向方面编程
- 软件的竞争就是服务的竞争
- ASP.NET 2.0服务器控件之复合控件概述
- C#截取屏幕↑ 选择自 AppleDotnet 的 Blog
- PHP+JS实现搜索自动提示。
- 服装ERP应用(八) 服装企业电子商务路线图
- 利用消息机制实现.NET AOP(面向方面编程)--通过RealProxy实现
- 用C#来捕获屏幕
- C#来捕获屏幕(2)--源程序代码
- sql server中datetime字段只取年月日如2006-04-21,默认值如何设置?getdate()得到的是包含时分秒的时间。
- 现代项目管理的基石-WBS
- 在Office系列软件中创建COM插件工具条,并实现工具条上的弹出菜单
- XML:将信息写入到XML中
- flash在线拍照并上传(ASP.NET)
- 转让有线通网络,可以到今年10月份