铁匠

做人要低调
随笔 - 130, 评论 - 254 , 引用 - 184

导航

公告

文章分类

存档

随笔分类

相册

BLOG

网站

论坛

2008年7月22日

进程外插件的实现

插件机制附处可见,甚至连很多WEB程序也会有。比如说DZ的论坛,动网的论坛等。在应用程序里面,跑插件的时候,最大的问题有两个:

1.插件的crash引起整个应用程序的crash

2.插件有问题时,修改后,需要停下整个程序,来更换插件。

在这时候,进程外插件的好处就显而易见:因为插件加载在进程外,所以插件crash了,不会影响主进程。同时可以自由地卸载插件。

在.net里面,实现进程外的插件的原理是:让插件跑在和主进程不同的AppDomain里面。

但是跨AppDomain来加载程序集确会有权限的问题,所以不能再像以前加载一个DLL后,去遍历每个类,来看有没有合适的插件在里面。它只能根据已知的类名来加载程序集。所以我先设计一个接口:

public interface IPlugInSum
{
    string[] GetPlugIns();
}

在这个接口里面实现对每个插件的描述:

public class PlugInSum :MarshalByRefObject, IPlugInSum
{
    public string[] GetPlugIns()
    {
        return new string[] { "DemoPlugIn.DemoPlugIn", "DemoPlugIn.DemoPlugIn2" };
    }
}

在这里面我实现了两个插件。同时强制要求这个描述对象的typename为:DemoPlugIn.PlugInSum。这样主进程里面获取了所有的类名后,就可以一个一个地去把插件加载起来了。

posted @ 10:36 | Feedback (0)

京ICP备 05050892号