初识iOpenWorks 插件框架

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kingshown_WZ/article/details/88877319

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

参考:

       架构设计——OSGI规范

      OSGI与分布式比较

我感兴趣的网站:上线了

猜你喜欢

转载自blog.csdn.net/kingshown_WZ/article/details/88877319