WEB开发网      婵犵數濞€濞佳囧磹婵犳艾鐤炬い鎰堕檮閸嬬喐銇勯弽銊с€掗梻鍕閺岋箑螣娓氼垱笑闂佽姘﹂褔婀佸┑鐘诧工妤犲憡绂嶉崜褏纾奸弶鍫涘妼缁楁岸鏌熷畡鐗堝殗闁诡喒鏅犲畷褰掝敃閵堝棙顔忔繝鐢靛仦閸ㄥ爼骞愰幘顔肩;闁规崘绉ぐ鎺撳亹闁绘垶锕╁Λ鍕⒑閹肩偛濡奸悗娑掓櫇缁顓兼径妯绘櫇闂佹寧绻傞弻濠囨晝閸屾稓鍘甸柣搴㈢⊕閿氶柣蹇ョ稻缁绘繃绻濋崘銊т紝闂佽鍨伴崯鏉戠暦閻旂⒈鏁傞柛鈾€鏅欑槐妯衡攽閻愬樊鍤熷┑顔藉劤铻為柛鏇ㄥ墯閸欏繘鏌嶉崫鍕櫣缂佲偓婢跺绠鹃柟瀛樼箘閿涘秵顨ラ悙顏勭伈闁诡喖缍婂畷鎯邦槻婵℃彃顭烽弻娑㈠Ω閵夈儺鍔夌紓浣稿€哥粔褰掑极閹剧粯鏅搁柨鐕傛嫹 ---闂傚倷鐒︾€笛兠洪埡鍛闁跨噦鎷�
开发学院软件开发VC 编写、加载和存取插件程序(Plug-Ins) 阅读

编写、加载和存取插件程序(Plug-Ins)

 2006-07-22 22:58:24 来源:WEB开发网 闂傚倷绶氬ḿ褍螞閹绢喖绠柨鐕傛嫹闂傚倷绀侀幉锟犲垂閻㈠灚宕查柟鎵閸庡秵銇勯幒鎴濃偓鐢稿磻閹炬枼妲堟繛鍡楃С濞岊亞绱撻崒姘扁枌闁瑰嚖鎷�婵犵數濮幏鍐川椤撴繄鎹曢梻渚€娼уú銈吤洪妸鈺佺劦妞ゆ帊鑳堕埊鏇㈡煏閸モ晛浠х紒杈╁仱閺佹捇鏁撻敓锟�闂傚倷绶氬ḿ褍螞閹绢喖绠柨鐕傛嫹  闂傚倷鑳舵灙缂佺粯顨呴埢宥夊即閵忕姵鐎梺缁樺姈椤愮厧鈽夊Ο閿嬬€婚梺褰掑亰閸撴稑鈻斿鑸碘拺闁告稑饪村▓鏃€绻涚仦鍌氬闁崇粯鎹囬獮瀣攽閹邦剚顔傛俊鐐€栧濠氬储瑜忛幉鎾晸閿燂拷
核心提示: 另一个函数 Assembly::LoadFrom 使你能从外部路径加载程序集,这里有一点模糊的是如果相同的程序集(由同一性规则确定)已经被从不同的路径加载,编写、加载和存取插件程序(Plug-Ins)(4),框架将会使用之,所以 LoadFrom 并不总是正确地使用通过该路径指定的程序集,

另一个函数 Assembly::LoadFrom 使你能从外部路径加载程序集。这里有一点模糊的是如果相同的程序集(由同一性规则确定)已经被从不同的路径加载,框架将会使用之。所以 LoadFrom 并不总是正确地使用通过该路径指定的程序集,尽管大多数时候能正确使用。晕了吧?还有另外一个方法是 Assembly::LoadFile,它总是加载请求的路径——但你几乎从来用不上 LoadFile,因为它解决不了依赖性问题,并且无法将程序集加载到正确的环境中(LoadFrom)。不用去了解所有的细节,我将对 LoadFrom 进行简单地讨论,以此说明对于简单的插件模型,它是一个很好用的函数。

这样一个模型的基本思路是定义一个接口,然后让其他人编写实现此接口的类。你的应用程序可以调用 Assembly::LoadFrom 来加载插件,并用反射来查找实现你所定义之接口的类。不过在你动手之前,有两个重要的问题要问:你的应用程序需要在运行中卸载或重新加载插件吗?你的程序需要 考虑对插件必须使用的文件或其它资源进行安全存取吗?如果你对两个问题的答案都为 YES,那么你将需要 AppDomain。

在框架中,没有办法直接卸载某个程序集。唯一途径是将程序集加载到单独的 AppDomain,然后卸载整个 AppDomain。每个 AppDomain 还可以有其自己的安全许可。 AppDomains 带有一个隔离的处理单元,通常由单独的进程操控,一般都用于服务器程序中,服务器基本上都是昼夜运行(24x7),并需要动态加载和卸载组件而不用重新启动。AppDomains 还被用于限制插件获得的许可,以便某个应用能加载非信任组件而不用担心其恶意行为。为了启用这种隔离,需要远程机制来使用多个 AppDomains;不同 的 AppDomains 其对象无法相互直接调用,他们必须跨 AppDomain 边界进行封送。尤其是类的共享实例必须从 MarshalByRefObject 派生。

上一页  1 2 3 4 5 6 7  下一页

Tags:编写 加载 存取

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接