关于应用程序域,程序集,插件技术的困惑,怎么没人来,来着有分!
我正在从事一个架构的设计,该架构要以插件形式提供扩展
但现在我面临一个技术难题,每个插件都应该支持动态的装载和卸载。如果每个插件(程序集)都由一个单独的应用程序域来装载,这样是可以通过卸载应用程序域来卸载插件,但我的每个插件内部都定义了一些UI信息(如winform窗体),这些UI作为子窗口要集成到父框架中,可问题也来了,应用程序域之间传递的对象是通过远程代理完成的(无法直接访问),所以来自插件UI的直接引用就无法被框架窗口所集成(嵌入到框架父窗口中),我该怎么办呢,高手赐教!
这个问题是我翻csdn 老帖搞出来的,个人兴趣,问题断尾,不知道有没高手给出好办法。
老帖地址http://topic.csdn.net/u/20070307/14/a64f6925-f0bd-45e2-a774-e080804fa20f.html
我自己测试了一下,他说的没错,我插件能获取到宿主窗体对象,能获取对象某些属性,甚至给他Text 属性赋值,但是我要是进行一些控件添加删除操作,就会提示
程序集“System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中的类型“System.Windows.Forms.Form+ControlCollection”未标记为可序列化。我已经都 加了序列化标记
郁闷中。。
------解决方案--------------------
高手向,帮顶~
我居然能看懂题目,进步了~~~
------解决方案--------------------
其实带UI的插件何必要动态装载和卸载?你的程序又不是需要不间断运行的服务。
------解决方案--------------------
------解决方案--------------------
你现在的问题是
跨AppDomain传递对象。换个思路用当前的AppDomain来加载插件(可以是UI插件)不就解决你的困扰了?
------解决方案--------------------
顶
顶
顶
------解决方案--------------------第一次接触,好迷惑!!!
------解决方案--------------------
------解决方案--------------------
我插件能获取到宿主窗体对象,能获取对象某些属性,甚至给他Text 属性赋值插件不应该反过来控制宿主,如果你要实现这样的Plugin机制,个人感觉从走错路了.
这篇文章,仅供参考:
Dynamic Plugins: Using the AppDomain Class to Load and Unload Code
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
楼主能不能参考一下VS2008本身的扩展机制呢,它貌似可以控制UI,而且插件也是隔离了的
------解决方案--------------------