说到AOP在cnblogs上也有不少关于实现的文章,所以这次就不描述具体实现;有兴趣可以下载组件源码了解,当然组件只是一个初型并不会有什么强大的功能,也可能存在比较多的问题。 这几天由于项目移交给测试人员测试,因此空闲的时间比较多;为了不浪费这些时间所以想到用Remoting透明代理机制做一个简单的AOP组件,顺便也学习Remoting中透明代理的实现和运用。刚开始做还是挺痛头的,因为本机的MSDN并没有充足的帮助。于是就到cnblogs和Google搜了一下,找到一编不错的文章:http://www.rsdn.ru/article/dotnet/cntxtvsrealproxy.xml。把资料整理和清楚一下思路就开始干活。实现过程大概花了一个工作日吧,主要实现了以下对象: AopProxyAttribute派生于ProxyAttribute AopRealProxyy派生于RealProxy /// <summary> /// 拦载对象描述接口 /// </summary> public interface ICutiner { /// <summary> /// 执行方法的源对象 /// </summary> object Source { get; } /// <summary> /// 执行方法的参数集 /// </summary> object[] Args { get; } /// <summary> /// 方法执行前拦载过程 /// </summary> void Executing(); /// <summary> /// 方法执行后拦载过程 /// </summary> /// <param name=”returnvalue”>返回值</param> /// <returns>处理后的返回</returns> object Executed(object returnvalue); /// <summary> /// 实始化拦载对象 /// </summary> /// <param name=”source”></param> /// <param name=”args”></param> void initialize(object source,object[] args); /// <summary> /// 执行方法错误信息 /// </summary> Exception Error { get; set; } } 制定规则后剩下的工作就整合了,如何把功能整合起来就不说了,对开发人员来说源码是最好的文档。 下面让我们来看下组件在实际使用中的效果。 值验证 [AopLibrary.AopProxy] public class Product:ContextBoundObject { public Product() { // // } private string mName; public string Name { get { return mName; } set { mName = value; } } public void Save() { } } 如何通过AOP的方式在调用Product对象的Save方法前进行检查Name值是否合法。可以通过以下方式实现横向检测对象: public class ValTest:AopLibrary.CutinerAdapter { public override void Executing() { Product pr = (Product)Source; if(pr.Name == null || pr.Name ==””) { throw(new Exception(“请输入合法的产品名称!”)); } base.Executing (); } } 当制定检测对象后,就可以通过配置文件关联起来。 <accepter type=”AopTest.validate.Product,AopTest”> <cutiner method=”Save” type=”AopTest.validate.ValTest,AopTest” /> </accepter> 测试调用代码: try { validate.Product product = new AopTest.validate.Product(); product.Name =”cat”; product.Save(); Console.WriteLine(“Save:OK”); product = new AopTest.validate.Product(); product.Save(); } catch(Exception e_) { Console.WriteLine(“Exception:”+e_.Message); } 统一错误处理 AopLibrary.AopProxy] public class DataParse:ContextBoundObject { public DataParse() { } public int ParseInt(string value) { return int.Parse(value); } public DateTime ParseDT(string value) { return DateTime.Parse(value); } } 通过AOP的方式统一捕获ParseInt和ParseDT方法异常并把错误信息保存起来。首先是编写错误处理的类: public class SaveException:AopLibrary.CutinerAdapter { public override object Executed(object returnvalue) { if(Error != null) { System.IO.StreamWriter writer = new System.IO.StreamWriter(“c:\\errorlog.txt”,true,System.Text.Encoding.Default); writer.WriteLine(Error.Message); writer.Close(); } return base.Executed (returnvalue); } } 有了处理对象后就通过配置关联起来. <accepter type=”AopTest.exception.DataParse,AopTest”> <cutiner method=”ParseDT,ParseInt” type=”AopTest.exception.SaveException,AopTest” /> </accepter> 配置完成后当运行ParseInt和ParseDT方法时发生错误就会把错误信息写到文件中。
基于remoting透明代理的aop组件_c#应用
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 基于remoting透明代理的aop组件_c#应用
相关推荐
-      利用c#远程存取access数据库_c#应用
-      c# 3.0新特性系列:隐含类型var_c#教程
-      c#动态生成树型结构的web程序设计_c#应用
-      论c#变得越来越臃肿是不可避免的_c#应用
-      用c#监控并显示cpu状态信息_c#应用
-      c#中实现vb中的createobject方法_c#应用
-      photoshop给花瓶打造彩绘效果_photoshop教程
-      使用c#创建sql server的存储过程_c#应用