最专业的通用.NET插件平台——尤埃开放服务平台介绍
尤埃开放服务平台(UIOSP)是基于.NET设计的插件化平台。该平台设计的初衷是:(1)为所有.NET应用环境设计一个通用的插件平台,即该平台能够以标准化的插件规范来开发基于.NET Framework的控制台应用、WinForm应用、ASP.NET应用、WPF应用、Windows服务应用及SilverLight应用和基于.NET Compact Framework的移动应用设计;(2)为基于.NET的统一开放平台提供支持,即开发人员基于该平台设计的可完全复用的插件可以通过统一开放平台开放给用户,这样开发者或者最终用户可以从该平台获取需要的模块然后组装成最终软件;(3)为企业构建一个基于插件库的标准化的软件生产线,用于支持软件产品自动升级、远程部署、远程管理、统一版本、局部更新、知识积累。
UIOSP插件平台通过对.NET CLR进行扩展实现优雅的通用的插件化框架,它支持模块化与插件化、面向服务架构、模块扩展三大功能。模块化与插件化为.NET应用程序提供了物理隔离的模块支持,它为每一个物理隔离的模块提供了标准的规范、隔离的目录结构、隔离的类加载器、多版本并存支持、插件依赖支持等功能;面向服务架构是实现模块化通讯的手段,每一个模块通过服务总线来注册/查询绑定/卸载服务,服务是模块间交互的手段。在该平台,服务是可管理的,这意味着插件间的交互可以被管理和监控。模块扩展功能为插件提供了可扩展机制,这样我们可以在不改变原有模块的代码情况下,来注入新的功能或更新原有功能。
你可以从插件平台这个链接下载到该平台的安装包,一旦安装后,它将为你提供:(1)用户开发指南;(2)Visual Studio标准项目模板,可用于创建不同应用环境的主程序和插件;(3)基于Visual Studio的插件配置工具,用于插件可视化配置;(4)远程控制台,可用于查看插件内核的插件状况,动态安装/启动/停止/卸载插件。
下图是基于该插件平台的软件系统的通用架构。在这里你根据应用系统的环境,创建相应的主程序,并利用UIOSP的BundleRuntime类来启动插件框架。在UIOSP,插件用英语单词Bundle来表示,Bundle可以翻译为插件或者模块,而BundleRuntime就是插件运行时了,这与WWF的WorkflowRuntime概念类似。一旦插件框架被启动,它将会加载位于plugins目录下的所有标准化的插件,并将插件组装成一个应用系统。应用程序的开发可以按2个步骤走:(1)创建主程序;(2)创建插件。
下图则是基于插件库的企业级应用系统架构。在这里,企业将建立自己的私有插件/模块仓库,构建自己的产品生产线,使用一致的方式来构建、维护、部署、升级、管理软件产品。
接下来以一个Demo来演示一下如何来演示这个插件框架的使用方法。
首先运行Visual Studio,然后使用向导创建一个“UIOSP”=>“高级Windows窗体应用程序”项目。
这样你就使用UIOSP提供的项目模板创建了一个默认的WinForm插件主程序了。
你可以发现创建的主程序包括:Program.cs启动类、bin/plugins目录及该目录下的三个默认插件。Program.cs类在这里完成的工作很简单:(1)创建一个BundleRuntime并调用Start方法来启动插件内核;(2)从插件内核服务总线中获取一个类型为Form的服务,即主窗体,然后运行该主窗体。一旦程序启动,那么在bin/plugins目录下的插件会被BundleRuntime加载并启动。这个项目里面有一个WinFormShellPlugin插件,该插件是一个通用的WinForm主窗体,该主窗体实现了菜单、导航栏、内容区域、状态栏,并支持换肤。你可以试一下启动这个程序,结果如下。
这个主程序包含的WinFormShellPlugin插件已经为你提供了一个漂亮的防Office的Windows空的壳子。下面我们来试着开发一个应用插件。回到Visual Studio,选中解决方案然后点击“添加新建项目”,选中“UIOSP”=>“高级Windows窗体插件”,命名为AppPlugin。需要注意的是,这个AppPlugin插件项目必须位于bin/plugins目录下。
浏览一下这个AppPlugin插件项目,其内容如下。插件包含一个Activator.cs、Manifest.xml、一个窗体、一个用户控件和一个资源。
在插件中,Manifest.xml是插件的配置文件,它用于声明插件的标识、名称、启动顺序、初始启动状态、本地类库、依赖的插件和类库、扩展信息。双击插件,你可以使用基于Visual Studio的插件配置工具来查看和更改配置信息。如下图所示。它包含四个标签页:(1)基本:用于配置插件的基本信息;(2)运行时:用于配置插件需要的类库、依赖的插件或依赖的插件的类库信息;(3)服务:用于配置插件提供的服务;(4)扩展:用于定义插件的扩展点和对其它插件的扩展信息。
按F7可以查看Manifest.xml的源代码,如下所示。<Bundle>节点定义基本信息,<Activator>节点定义指定插件执行入口和出口的类型,其定义就是这个项目的AppPlugin.Activator类型,<Runtime>指定了这个插件的本地类库,<Extension>节点定义了对WinFormShellPlugin的扩展,它向这个插件的左边的导航栏注册了2个菜单和菜单点击时显示的窗体/用户控件的类型。
1 <?xml version="1.0" encoding="utf-8" ?>
2
补充:Web开发 , ASP.Net ,