1、OSGI
OSGi(Open Service Gateway Initiative),即开放服务网关协议,是面向Java的动态模型系统。
OSGI是指由OSGI Alliance组织制定的Java模块化规范,OSGI规范的核心部分是一个框架,其中定义了应用程序的生命周期模式和服务注册。基于OSGI框架定义了大量的OSGI服务:日志、配置管理,HTTP服务(运行Servlet)、XML解析、设备访问、软件包管理、许可管理、用户管理、IO连接、Jini和UPnP等。
OSGI中文社区:http://www.osgi.com.cn/
OSGI官方网站:https://www.osgi.org/
OSGI框架实现了一个优雅、完整和动态的组件模型,组件(bundle)无需重新引导可以被远程安装、启动、升级和卸载。
OSGI服务平台提供在多种网络设备上无需重启的动态改变构造的功能。
为了最小化耦合度和促使耦合度可管理,OSGI技术提供了一种面向服务的架构,使组件动态地发现对方。
OSGI联盟已经开发了如HTTP服务器、配置、日志、安全、用户管理、XML等很多公共功能标准组件接口。标准组件的兼容性插件实现可以从不同计算机服务提供商得到。
OSGi的主要职责就是为了让开发者能够创建动态化、模块化的Java系统。
2、iOpenWorks插件框架概述 [博客]
iOpenWorks是一个继承了OSGI的一个开发框架。开放工厂OSGi.NET插件框架,是OSGi R4.2规范移植到.NET平台的实现。OSGi全称为Open Service Gateway Initiative,它一方面指由IBM、Oracle、BEA、SAP等国际IT巨头组成的OSGi联盟组织;另一方面指该组织制定的一个基于Java语言的服务规范——OSGi服务平台。
OSGi.NET插件框架提供了模块化与插件化、面向服务架构和模块扩展三大功能,适用于控制台、WinForm、Windows服务、WPF、ASP.NET和移动平台等任意.NET应用环境。
3、示例:面向服务Demo
(1)概念
<1>宿主应用程序---Shell
插件模块---Plug-in
<2>服务契约:接口,一般是一个模块或一个程序集。---ContractModule
服务实现:类,可分为服务使用模块和服务实现模块。----xxxModule
***服务使用模块,Context通过GetService或GetFirstOrDefaultService方法“获取服务”;
***服务实现模块,Context通过AddService方法“注册服务”。
***通常,由Impl文件夹的是“注册”,没有Impl文件夹的是“使用”。
<3>模块配置文件
manifest.xml是插件的配置文件,默认使用UIOSP编辑器打开,它是图形化编写模块配置工具。该编辑器分为四部分:基本、运行时、服务和扩展。
***基本
<Bundle xmlns="urn:uiosp-bundle-manifest-2.0" SymbolicName="UIShell.SimpleWinFormShellPlugin" Name="UIShell.SimpleWinFormShellPlugin" Version="1.0.0.0" InitializedState="Active">
<Activator Type="UIShell.SimpleWinFormShellPlugin.Activator"/>
</Bundle>
***运行时:Dependency是服务实现中的文件,用于与有依赖关系的“服务契约”文件进行绑定。
<Runtime>
<Assembly Path="bin\UIShell.SimpleWinFormShellPlugin.dll"/>
<Dependency BundleSymbolicName = "***"/>
</Runtime>
***服务:Interface接口
<Services>
<service Interface = "***" Type = "***"/>
</Services>
***扩展
<Extension Point="PageFlowService.PageNode">
<PageNode Name="MainPage" Priority="40" Value="UIShell.SimpleWinFormShellPlugin.MainForm" />
</Extension>
(2)技术点
<1>服务契约插件的配置文件中,删除Activator和其相关定义,并定义StartLevel = 2,使其可以最早启动。
<2>获取插件中文件路径
string strPath = Activator.Context.Bundle.Lacation; //获取当前plug-in的默认路径
拓展:
第三方控件DevExpress
参考:
我感兴趣的网站:上线了