博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
三分钟实现一个插件平台和一个插件——基于最简单的OSGi.NET插件框架
阅读量:6168 次
发布时间:2019-06-21

本文共 2097 字,大约阅读时间需要 6 分钟。

你相信三分钟能实现一个插件平台和一个插件吗?在这里我将演示一下史上最简单的插件框架。这个Demo以控制台为例,实现一个基于控制台的插件框架和一个控制台插件。当然,除了能三分钟开发一个控制台插件平台和插件,你还可以开发WinForm和Web,该框架完全兼容控制台、WinForm和ASP.NET应用系统,开发过程、开发规范完全一致。OK,我们直切主题。

 

1 控制台宿主——控制台插件框架

1) 在Visual Studio 2008中创建一个名为ConsoleShell1的命令行宿主应用程序。

 

2) 此时自动生成ConsoleShell1项目结构如下,它由一个Program.cs主程序和位于bin/plugin下的系统服务插件构成。该项目在Main方法中通过调用BundleRuntime.Start方法启动插件框架,然后加载运行所有插件。

3) 编译运行解决方案,此时的ConsoleShell只加载了几个系统的服务模块,使用UIShell.OSGi Remote Management Console来远程监控插件平台的结果如下。在控制台上输入list或者l命令,可以查看到目前启动了框架和6个系统服务模块。

 

该远程管理控制台通过ConsoleShell加载的RemotingManagement模块暴露的WebService来管理远程框架运行状况。目前,它支持从远程安装、启动、停止、卸载、查询模块等功能。(声明:该控制台工具是基于EgeyeAddin 开源产品的ConsoleService来做,由于时间比较紧直接重用EgeyeAddin中ConsoleService大部分源代码,在此表示感谢。此外,我们还用了NDigester这个开源组件用于解析XML文件。)

 

到此为止,一个控制台插件框架便架构完成了。 

 

2 控制台插件

1) 继续在1中所演示的工程中添加一个ConsolePlugin项目,命名为ConsolePlugin1。注意其位置是指向 Console Shell1\bin\plugins目录。

2) 此时生成的项目内容如下,它由模块激活器Activator.cs文件和模块清单文件Manifest.xml组成。

3) 修改Activator类的Start()和Stop()方法,参考示例如下:

 

 1 
public
 
class
 Activator : IBundleActivator
 2 
{
 3 
public
 
void
 Start(IBundleContext context)
 4 
{
 5 
Console.WriteLine(
"
ConsolePlugin1 is active.
"
);
 6 
}
 7 
public
 
void
 Stop(IBundleContext context)
 8 
{
 9 
Console.WriteLine(
"
ConsolePlugin1 is stopped.
"
);
10 
}
11 
}

 

4) 至此,一个基本的Plugin示例已经建立完毕。

5) 编译整个解决方案,并运行上节建立的控制台应用程序,结果如下:

6) 运行远程管理控制台,运行list命令,结果如下,此时ConsolePlugin1已经被架加载并处于Active状态。

7) 在远程管理控制台输入“stop 3”来停止该模块,结果如下:

此时,ConsolePlugin1进入Resolved状态并在ConsoleShell运行的控制台上输出“ConsolePlugin1 is stopped.”信息。

 

这样一个插件也实现了!以下是这个过程涉及的名词的简单介绍。

 

3 宿主简介

插件框架是在公共语言运行时之上的模块运行时框架,需要由宿主启动和停止。也就是说,宿主是启动和停止模块运行时的程序,通过这种方式宿主就继承了插件框架动态插件化的所有特性。它支持各种类型的宿主,包括控制台、WinForm和ASP.NET等。控制台宿主为所有的插件提供了一个基于控制台的运行环境,而WinForm则相应的提供了一个桌面应用环境和网络应用环境。

4 激活器简介

激活器(Activator)是插件平台启动插件的入口/出口点,即在启动模块时会调用激活器的Start()函数,如果调用成功,模块将进入Active状态;当定制模块时会调用Stop()函数,一旦调用成功,模块将进入Resolved状态。因此插件可在激活器中实现预处理/清理功能,例如在Start()中模块可向服务总线注册服务,其它插件则可在此获取共享的服务;此外还可以在这里执行启动线程等其它操作。

5 Manifest简介

Manifes.xml包含了各个插件或服务所包含的私有定义, 依赖声明, 扩展及扩展点信息等, 是插件向底层框架暴露自己的唯一途径, 平台可以通过Manifest实现对插件和服务基础支持等一系列功能。

本文转自道法自然博客园博客,原文链接:http://www.cnblogs.com/baihmpgy/archive/2010/06/22/1762367.html,如需转载请自行联系原作者

你可能感兴趣的文章
《现在的泪,都是当年脑子进的水》读书笔记
查看>>
IOSday04 UIButton使用
查看>>
铁大好青年内部分组
查看>>
unity3D ——自带寻路Navmesh入门教程(一)(转)
查看>>
判断字符串是否为数字的函数
查看>>
[emuch.net]MatrixComputations(7-12)
查看>>
linux 命令 — 文件相关
查看>>
自己空闲的时候封装一下
查看>>
Datagard產生gap
查看>>
本机web开发环境的搭建--nginx篇
查看>>
rcnn 理解笔记
查看>>
问答项目---登陆验证码点击切换及异步验证验证码
查看>>
plist文件中iphone和ipad的应用图片设置
查看>>
搜集的一些资源网站链接
查看>>
struts2中类型转换器的使用
查看>>
11G Oracle RAC添加新表空间时数据文件误放置到本地文件系统的修正
查看>>
从91移动应用发展趋势报告看国内应用现状
查看>>
【ORACLE技术嘉年华PPT】MySQL压力测试经验
查看>>
Linux下汇编调试器GDB的使用
查看>>
css溢出机制探究
查看>>