开源一个组件, Clover.Proxy, 请大家指正
2011-11-28 10:42
239 查看
Clover.Proxy是一个基于.net 4.0的类库,
项目地址:https://github.com/xwj90/Clover.Proxy (MIT,随便使用)
它提供一种简单的方式代理执行现有类库里面的方法和属性,它可以用于以下情况:
1. 对现有类的方法和属性,增加BeforeCall 和AfterCall
通过赋值delegate的方式很方便的自定义BeforeCall 和AfterCall
在BeforeCall 和AfterCall中可以执行记录日志,分析参数,修改参数,记录每个方法的调用次数等. (可以通过配置的方式,打开或者关闭功能,如此就能较为方便的调试了)
通过配置的方式,很方便的控制影响范围
通过修改自动生成的代码,可以做的更多,例如对某些方法自动加LOG, 在执行过程中修改变量等
2. Proxy支持将现有方法迁移到不同的AppDomain中执行 (主要功能完成)
可以控制独立AppDomain的性能和资源消耗
跨AppDomain操作有很强的独立性,可以扩展为自动更新和重启 (插件形式,需要开发)
由于每个AppDomain支持自己的Configuration File,所以通过给不同的类和assembly配置不同的配置文件,我们可以修改很多现有类库的行为
例如现有项目使用日志系统,不过整个项目的日志都要写到一个文件里面,通过不同的配置文件,我们可以让不同的类或者不同的程序集写入不同的日志文件
跨域会有性能损失
3.该项目更像是一个研究性质的项目,其中涉及到了以下的技术: (如果你有兴趣,看看源码)
动态生成cs文件和编译成Assembly
分析Type相关信息
类继承的相关知识
动态创建AppDomain和加载Assembly
跨域操作的相关内容
以下是一个Sample:
感谢 shiweichuan 和 weikaishio
项目地址:https://github.com/xwj90/Clover.Proxy (MIT,随便使用)
它提供一种简单的方式代理执行现有类库里面的方法和属性,它可以用于以下情况:
1. 对现有类的方法和属性,增加BeforeCall 和AfterCall
通过赋值delegate的方式很方便的自定义BeforeCall 和AfterCall
在BeforeCall 和AfterCall中可以执行记录日志,分析参数,修改参数,记录每个方法的调用次数等. (可以通过配置的方式,打开或者关闭功能,如此就能较为方便的调试了)
通过配置的方式,很方便的控制影响范围
通过修改自动生成的代码,可以做的更多,例如对某些方法自动加LOG, 在执行过程中修改变量等
2. Proxy支持将现有方法迁移到不同的AppDomain中执行 (主要功能完成)
可以控制独立AppDomain的性能和资源消耗
跨AppDomain操作有很强的独立性,可以扩展为自动更新和重启 (插件形式,需要开发)
由于每个AppDomain支持自己的Configuration File,所以通过给不同的类和assembly配置不同的配置文件,我们可以修改很多现有类库的行为
例如现有项目使用日志系统,不过整个项目的日志都要写到一个文件里面,通过不同的配置文件,我们可以让不同的类或者不同的程序集写入不同的日志文件
跨域会有性能损失
3.该项目更像是一个研究性质的项目,其中涉及到了以下的技术: (如果你有兴趣,看看源码)
动态生成cs文件和编译成Assembly
分析Type相关信息
类继承的相关知识
动态创建AppDomain和加载Assembly
跨域操作的相关内容
以下是一个Sample:
ProxyService service = new ProxyService(); service.BeforeCall = (p) => { Console.WriteLine("Before Call : " + p.Arguments); }; service.AfterCall = (p) => { Console.WriteLine("After Call : " + p.ReturnValue); }; var item = service.Create<TestWrapper>(); // method var r1 = item.GetAll(128, "Test String"); Console.WriteLine(); // property 可以通过配置设置某个方法,或者某类方法需要调用BeforeCall & AfterCall var r2 = item.Name; Console.WriteLine(); var item2 = service.Create<TestWrapper2>(); var r3 = item2.Test("test string"); //run method in remote domain //未完全完成
感谢 shiweichuan 和 weikaishio
相关文章推荐
- 发布一个Silverlight开源控件--希望大家指正
- 发布一个Silverlight开源控件--希望大家指正
- 一个用C#编写的自动读写配置文件的开源组件--V1.0.2版本
- 发布一款开源英语字典软件dedict,欢迎大家指正体验。
- 我刚创建了一个开源项目OXmlEd,欢迎大家拍砖
- 给大家推荐一个我的开源项目: Permission Base
- 一个用C#编写的自动读写配置文件的开源组件
- 一个用C#编写的自动读写配置文件的开源组件
- 一个开源Delphi分类组件推荐网页
- FlexSpy一个开源的Flex 组件
- 我搞了一个开源的项目,网址http://akenxp.gro.clinux.org目前还是计划阶段,欢迎大家加盟。
- 推荐一个可以拖动和侧滑Item的ListView开源组件
- 打算使用纯C开发一个数据结构及算法库,欢迎大家指正
- KTDictSeg 一个C#.net做的简单快速准确的开源中文分词组件
- 一个很好用开源的定时任务组件
- 启动了一个开源项目:文档共享系统,欢迎大家加入!
- 请大家说一说:有没有必要针对VSS备份过程,做成一个开源小工具?
- C#使用Xamarin开发可移植移动应用终章(11.获取设备信息与常用组件,开源一个可开发模版.)
- 我的第一个开源组件:一个抹出来的快捷菜单按钮
- 在Web API中使用Swagger-UI开源组件(一个深坑的解决)