构建插件式的应用程序框架(五)----管理插件

我们现在已经搭建了插件式的应用程序框架,接下来的工作就是要充实框架的内容,提供基本的服务,也就是Service。我想首要的任务就是提供插件的管理服务,我在前面的文章也提到了,要实现动态加载必须要知道插件寄宿在哪里,哪些要加载,哪些不加载,这些就是这篇文章要讨论的问题。
       首先解决的就是插件放在什么地方,我采取的传统的方法,将插件放到应用程序所在目录下的制定目录,我会在应用程序所在的目录下创建一个文件夹,命名为Plugins。接下来的工作就是要通知哪些插件是要加载的,哪些是不需要加载的,我会将这些信息放到应用程序的配置文件中的制定配置块中,当应用程序运行的时候,就会读取配置文件,并根据获得的信息加载插件。另外我们的应用程序框架是建立在Service基础之上,所以我需要创建一个管理插件的service
       我们现在定义一个插件管理的Service接口。        

构建插件式的应用程序框架(五)----管理插件using System;
构建插件式的应用程序框架(五)----管理插件
using System.Collections.Generic;
构建插件式的应用程序框架(五)----管理插件
using System.Text;
构建插件式的应用程序框架(五)----管理插件
构建插件式的应用程序框架(五)----管理插件
namespace PluginFramework
构建插件式的应用程序框架(五)----管理插件
{
构建插件式的应用程序框架(五)----管理插件    
public interface IPluginService
构建插件式的应用程序框架(五)----管理插件    
{
构建插件式的应用程序框架(五)----管理插件        IApplication Application 
get;set;}
构建插件式的应用程序框架(五)----管理插件        
void AddPlugin(String pluginName, String pluginType, String Assembly, String pluginDescription);
构建插件式的应用程序框架(五)----管理插件        
void RemovePlugin(String pluginName);
构建插件式的应用程序框架(五)----管理插件        String[] GetAllPluginNames();
构建插件式的应用程序框架(五)----管理插件        Boolean Contains(String pluginName);
构建插件式的应用程序框架(五)----管理插件        Boolean LoadPlugin(String pluginName);
构建插件式的应用程序框架(五)----管理插件        Boolean UnLoadPlugin(String pluginName);
构建插件式的应用程序框架(五)----管理插件        IPlugin GetPluginInstance(String pluginName);
构建插件式的应用程序框架(五)----管理插件        
void LoadAllPlugin();
构建插件式的应用程序框架(五)----管理插件    }

构建插件式的应用程序框架(五)----管理插件}

构建插件式的应用程序框架(五)----管理插件

      PluginService要实现的目标首先是在配置文件中添加/删除要加载的插件以及相关的信息,接下来就是动态的加载插件。我们要定义几个类型:Plugin配置区块类型,Plugin元素类型,plugin元素集合类型,以便我们能够读取插件的信息。
       最后我们实现PluginService:

      
构建插件式的应用程序框架(五)----管理插件using System;
构建插件式的应用程序框架(五)----管理插件
using System.Collections.Generic;
构建插件式的应用程序框架(五)----管理插件
using System.Text;
构建插件式的应用程序框架(五)----管理插件
using System.Xml;
构建插件式的应用程序框架(五)----管理插件
using System.Configuration;
构建插件式的应用程序框架(五)----管理插件
using System.Reflection;
构建插件式的应用程序框架(五)----管理插件
using System.Windows.Forms;
构建插件式的应用程序框架(五)----管理插件
using System.IO;
构建插件式的应用程序框架(五)----管理插件
using System.Collections;
构建插件式的应用程序框架(五)----管理插件
构建插件式的应用程序框架(五)----管理插件
namespace PluginFramework
构建插件式的应用程序框架(五)----管理插件
{
构建插件式的应用程序框架(五)----管理插件    
public class PluginService : IPluginService
构建插件式的应用程序框架(五)----管理插件    
{
构建插件式的应用程序框架(五)----管理插件        
private IApplication application = null;
构建插件式的应用程序框架(五)----管理插件        
private PluginConfigurationSection config = null;
构建插件式的应用程序框架(五)----管理插件        
private Dictionary<String, IPlugin> plugins = new Dictionary<string, IPlugin>();
构建插件式的应用程序框架(五)----管理插件        
private XmlDocument doc = new XmlDocument();
构建插件式的应用程序框架(五)----管理插件
构建插件式的应用程序框架(五)----管理插件        
public PluginService()
构建插件式的应用程序框架(五)----管理插件        
{
构建插件式的应用程序框架(五)----管理插件
构建插件式的应用程序框架(五)----管理插件        }

构建插件式的应用程序框架(五)----管理插件
构建插件式的应用程序框架(五)----管理插件        
public PluginService(IApplication application)
构建插件式的应用程序框架(五)----管理插件        
{
构建插件式的应用程序框架(五)----管理插件            
this.application = application;
构建插件式的应用程序框架(五)----管理插件
构建插件式的应用程序框架(五)----管理插件        }

构建插件式的应用程序框架(五)----管理插件
构建插件式的应用程序框架(五)----管理插件        
IPluginService Members
构建插件式的应用程序框架(五)----管理插件    }

构建插件式的应用程序框架(五)----管理插件}

构建插件式的应用程序框架(五)----管理插件
      

    由于代码比较多,我也就不一一列举了,只把比较重要的代码列出来,其余的我会提供源代码的下载。在实现了PluginService以后,我们需要有一个地方能够使用这个Service来管理插件,我的做法是在一个菜单里添加一个项目,当用户点击这个项目的时候弹出插件管理的对话框,用户在这个对话框中选择使用那些插件,当插件被选中的时候,插件会被立即加载进来,并且记录到配置文件里,当用户下次运行应用程序的时候,插件默认会被自动的加载。

       另外从现在开始我们就需要使用配置文件了,所以,我们需要给应用程序添加一个app.config文件,文件内容如下:
      
构建插件式的应用程序框架(五)----管理插件<?xml version="1.0" encoding="utf-8" ?>
构建插件式的应用程序框架(五)----管理插件
<configuration>
构建插件式的应用程序框架(五)----管理插件  
<configSections>
构建插件式的应用程序框架(五)----管理插件    
<section
构建插件式的应用程序框架(五)----管理插件      
name="PluginSection"
构建插件式的应用程序框架(五)----管理插件      type
="PluginFramework.PluginConfigurationSection, PluginFramework"
构建插件式的应用程序框架(五)----管理插件      
/>    
构建插件式的应用程序框架(五)----管理插件  
</configSections> 
构建插件式的应用程序框架(五)----管理插件  
<PluginSection>
构建插件式的应用程序框架(五)----管理插件    
构建插件式的应用程序框架(五)----管理插件  
</PluginSection>
构建插件式的应用程序框架(五)----管理插件
</configuration>

      样子,总体来说我们就为Plugin的管理提供了一个基本的实现,如果大家还有什么不明白的地方,可以参考我提供的源代码或者通过e-mail和我联系。






本文转自纶巾客博客园博客,原文链接:http://www.cnblogs.com/guanjinke/archive/2007/03/12/672454.html,如需转载请自行联系原作者
上一篇:如何解决svn清理失败 不能更新 cleanup失败 cleanup乱码 更新乱码 svn更新提示清理 清理乱码不能清理 svn故障修复SVN cleanup 陷入死循环 svn cleanup时遇到错误怎么办


下一篇:SAP UI5 application component运行时加载的奥秘