基于remoting透明代理的aop组件_c#应用

2008-02-23 05:42:58来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

说到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)

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: c# 4.0语言将出现重大改变,带来一段code preview _c#教程

下一篇: 了解c#2.0中的anonymous methods(匿名方法)_c#应用