您的位置:首页 > 其它

开源一个组件, 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:

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 //未完全完成


感谢 shiweichuanweikaishio
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: