开发者社区> 嗯哼9925> 正文

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

简介:
+关注继续查看

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

None.gifusing System;
None.gif
using System.Collections.Generic;
None.gif
using System.Text;
None.gif
None.gif
namespace PluginFramework
ExpandedBlockStart.gif
{
InBlock.gif    
public interface IPluginService
ExpandedSubBlockStart.gif    
{
ExpandedSubBlockStart.gif        IApplication Application 
get;set;}
InBlock.gif        
void AddPlugin(String pluginName, String pluginType, String Assembly, String pluginDescription);
InBlock.gif        
void RemovePlugin(String pluginName);
InBlock.gif        String[] GetAllPluginNames();
InBlock.gif        Boolean Contains(String pluginName);
InBlock.gif        Boolean LoadPlugin(String pluginName);
InBlock.gif        Boolean UnLoadPlugin(String pluginName);
InBlock.gif        IPlugin GetPluginInstance(String pluginName);
InBlock.gif        
void LoadAllPlugin();
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif

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

      
None.gifusing System;
None.gif
using System.Collections.Generic;
None.gif
using System.Text;
None.gif
using System.Xml;
None.gif
using System.Configuration;
None.gif
using System.Reflection;
None.gif
using System.Windows.Forms;
None.gif
using System.IO;
None.gif
using System.Collections;
None.gif
None.gif
namespace PluginFramework
ExpandedBlockStart.gif
{
InBlock.gif    
public class PluginService : IPluginService
ExpandedSubBlockStart.gif    
{
InBlock.gif        
private IApplication application = null;
InBlock.gif        
private PluginConfigurationSection config = null;
InBlock.gif        
private Dictionary<String, IPlugin> plugins = new Dictionary<string, IPlugin>();
InBlock.gif        
private XmlDocument doc = new XmlDocument();
InBlock.gif
InBlock.gif        
public PluginService()
ExpandedSubBlockStart.gif        
{
InBlock.gif
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
public PluginService(IApplication application)
ExpandedSubBlockStart.gif        
{
InBlock.gif            
this.application = application;
InBlock.gif
ExpandedSubBlockEnd.gif        }

InBlock.gif
ContractedSubBlock.gif        
IPluginService Members
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif
      

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

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

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






本文转自纶巾客博客园博客,原文链接:http://www.cnblogs.com/guanjinke/archive/2007/03/12/672454.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
响应式 Web 设计的 20 个有用的 jQuery 插件
响应式网页设计是Ethan Marcotte在去年5月份提出的一个概念,简而言之,就是一个网站能够兼容多个终端——而不是为每个终端做一个特定的版本。这个概念可以说是是为移动互联网而生的! 本文介绍 20 个 jQuery 插件适合进行响应式 Web 网站设计。
688 0
使用JSF和JSR168开发AJAX应用程序
使用JSF和JSR168开发AJAX应用程序
585 0
[Unity3d]场景管理插件-SceneManager
Unity3d中提供了场景Scene的概念,Scene就是一组相关联的游戏对象的一个集合,通常每个集合就是一个场景,但是也有可能只是一个场景的一部分! 场景中的游戏对象是任意的,可以是HUD的UI组件,场景地图,模型等等 Unity3d提供了一...
1187 0
Palo Alto Networks推出云应用框架
本文讲的是 Palo Alto Networks推出云应用框架,下一代安全企业Palo Alto Networks近日宣布推出框架Palo Alto Networks应用框架,该框架以云为基础,可实现对Palo Alto Networks 下一代安全平台的功能扩展,助力客户快速购买和使用由各种规模供应商提供的广泛的云安全创新应用。
1385 0
Cloud Toolkit Maven 插件部署应用到阿里云 EDAS
针对 EDAS 开发者,如果当前正在使用 WAR 包或 JAR 包来部署应用,那么就可以通过 Cloud Toolkit Maven 插件部署应用到阿里云 EDAS。
9741 0
+关注
4715
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载