10 2012 档案

摘要:前面已经实现了插件的自动加载,调用者拿到插件实例后,如果要调用含有Action或者Func参数的方法时,需要思考"我这个回调应该在哪个域执行呢?" . 仔细想想,貌似应该在哪个域里执行,应该在接口定义时定义好以避免混乱 阅读全文
posted @ 2012-10-14 21:29 阿牛 阅读(814) 评论(4) 推荐(0) 编辑
摘要:前面我们已经实现了IPlugin接口的插件自动加载。 但是程序使用中,可以不仅仅只有一个接口,而可能是多个接口并存,不能每个接口都手动实现代码类!怎么办? 解决方案是:泛型+EMIT。 使用泛型把自动加载和插件接口分开,使用EMIT自动生成代理类。 阅读全文
posted @ 2012-10-14 01:26 阿牛 阅读(1353) 评论(0) 推荐(1) 编辑
摘要:前面已经得到了热插拔的插件原型,这次讨论如果插件是服务提供者怎么办? 我能想到的, 需要在起动时加载所有插件 然后在插件变动时,及时卸载旧的插件,加载新的插件。 如果有新插件放在目录中,需要马上加载新的插件。 如果插件被删除,我们要把对应的服务也移除。 最终使用时,如下: private void FormMain_Load(object sender, EventArgs e) { var inst = PluginManager.Instance; inst.PluginChanged += OnPluginChanged; } void OnPluginChanged(object sender, PluginManagerEventArgs e) { if (e.ChangeType == PluginChangeType.Created) { // 这里初始化插件,提供服务 e.PluginInstance.Run(DateTime.Now.To 阅读全文
posted @ 2012-10-12 21:06 阿牛 阅读(749) 评论(1) 推荐(0) 编辑
摘要:实现在调用域中执行回调 阅读全文
posted @ 2012-10-12 10:28 阿牛 阅读(904) 评论(1) 推荐(0) 编辑
摘要:看了空逸云的"基于AppDomain的"插件式"开发"后,在其基础上,做优化修改。 1. 使用AppDomain.CurrentDomain.AssemblyResolve ,在程序集找不到时,去plugins 目录中再次加载。这样就可以直接加载插件类名,方便多了。 2. 插件的方法有限,直接写上方法代理,去除了动态生成方法调用的性能损失。 阅读全文
posted @ 2012-10-11 17:18 阿牛 阅读(1895) 评论(1) 推荐(0) 编辑
摘要:虽说现在多数电脑都支持WIFI,但也有不支持的。 而现在安卓手机都带WIFI设备,于是抱着试试看的态度,让电脑通过手机的WIFI上网, 没有想到一举成功。 阅读全文
posted @ 2012-10-07 10:12 阿牛 阅读(9086) 评论(0) 推荐(0) 编辑