基于remoting透明代理的aop组件_c#应用
2008-02-23 05:42:58来源:互联网 阅读 ()
说到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
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash