iTimothy

Dynamic Plugins Manager (二) 配置及实现分析

整个Plugins Manager是一个基于dll的程序集,开发平台,基于VS2008和.NET 3.5 Framework。为何要用.NET 3.5呢?没别的原因,只要是为了尝试一下Linq to XML [cool]

使用改组件,需要在应用程序中,添加引用。另外,还需要在应用程序中,建立相关的配置项:

[code]

[/code]

PluginsPath是插件的主目录,里面通过子目录的方式,存放不同的插件。Plugins Manager在启动的时候,会遍历插件主目录,并搜寻可加载的插件。

LogPath是插件的日志目录,里面的日志文件,会详细记载插件管理器当前的运行情况。

另外,在Plugins Manager中,区别不同的插件,是根据不同的插件名称来决定的,这取决于插件dll的命名。 对于不同的插件,Plugins Manager也提供不同的特性配置文件。配置文件是.xml文件,命名需要和插件dll相一致。 下面是一个配置文件的示例: [code]

Component.Class1 True

D:\MyCode\C# Projects\DynamicPlugInsApp\ITestInterface\bin\Debug\ITestInterface.dll

[/code]

TypeName:插件的类名,和具体的插件命名空间和类名有关,Plugins Manager根据配置文件提供此相关信息,通过.NET的反射技术,生成具体的插件Instance EnablePlugin:插件开关,True表示当前插件可用,False表示阻止Plugins Manager加载此插件。该开关可以在Plugins Manager运行前设定,也可以在Plugins Manager运行时动态更改。Plugins Manager会检测配置文件变化,并留意EnablePlugin开关,以决定是否动态加载或者卸载该插件。 ConstructParams:此节点,及其子节点,用以读取插件是否需要在运行时初始化构造函数。子节点用以描述构造函数中的参数,以及类型,和初始化的值。构造初始化函数,也是在.NET的反射中实现。这里要注意,节点顺序和构造函数参数顺序有关。如果插件不需要构造函数,可以关闭此节点。 ReferenceList:此节点用以需要动态编译的插件,如果插件代码中还引用了其他的程序集,需要在此进行描述。

此外,插件还提供了事件通知功能,供应用程序进行响应和处理,实现的事件类型有以下几种:

[code] public enum PluginEventType { PluginLoadOver, //所有插件加载完毕 PluginAdded, //插件新增完毕 PluginRemoved, //插件卸载完毕 PluginStopped, //插件管理器已停止 PluginStarted //插件管理器已启动 } [/code]

插件的事件参数定义如下,只包含简单的事件类型和文本描述:

[code]
public class PluginEventArgs : EventArgs
{
    #region Private Members
    public PluginEventType EventType { get; set; }
    public string EventMessage { get; set; }
    #endregion

    public PluginEventArgs(PluginEventType eventtype, string message)
    {
        EventType = eventtype;
        EventMessage = message;
    }

}

[/code]

以上是使用该插件,需要配置的地方,下一篇日志,将演示该插件的Demo.

支持原创技术分享,据说打赏我的人,都找到了女朋友!