当前位置: 首页 > 软件库 > 程序开发 > OSGi 框架 >

OSGi.NET

基于 OSGi 规范的 C# 基础框架
授权协议 GPL
开发语言 C#
所属分类 程序开发、 OSGi 框架
软件类型 开源软件
地区 国产
投 递 者 弓嘉纳
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

这是实现的一套基于OSGi规范的C#基础框架-OSGi.NET,并且用Go语言初步实现了插件的管理平台-插件仓库。在几个中小型项目中有所应用(Winform、WPF),主要可以解决多人协作的开发规范与插件的管理问题。

更多说明: http://www.diginfo.me/osgi-net-implement

简介:

OSGi.NET框架是一个参照了OSGi规范的模块化管理框架。框架为应用程序扩展(组件(bundle))提供了一个标准环境。整个框架可以划分为一些层次:

  1. 运行环境

  2. 模块(Bundle)

  3. 生命周期管理

  4. 服务注册

  5. 扩展点支持

目前OSGi.NET具有如下特色:

  1. 组件的可插拔性:组件可根据业务需要在运行时进行装载、卸载操作

  2. 组件的动态更新:组件在运行时可更新替换当前版本

  3. 组件的版本隔离:不同组件引用相同产品的不同版本程序集可以版本隔离

  4. 组件完整的生命周期:包括已安装、已装载、已激活、启动中、停止中、已卸载

  5. 组件的加载顺序:组件加载根据业务要求可设置加载级别来控制加载次序

  6. 组件的通信支持:组件间通过面向服务的编程模型来达到组件间通信、调用的目的

  7. 组件的扩展支持:组件提供了扩展点及其扩展来满足某个组件的扩展性支持

启动一个OSGi.NET应用程序仅需要如下代码

using System;

using OSGi.NET.Core.Root;

namespace ConsoleDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建框架工厂
            var frameworkFactory = new FrameworkFactory();
            //创建框架内核
            var framework = frameworkFactory.CreateFramework();
            //初始化框架
            framework.Init();
            //启动框架
            framework.Start();

            Console.ReadLine();
        }
    }
}

创建一个OSGi.NET项目需要:

  1. 引用框架内核程序集OSGi.NET.dll

  2. 添加框架内核配置文件OSGi.NET.properties

  3. 如需要日志支持,添加log4net.config文件及log4net.dll程序集引用

OSGi.NET项目的默认文件目录结构如下
/程序目录
/程序目录/Bundles/
/程序目录/Bundles/模块A/
/程序目录/Bundles/模块A/Manifest.xml
/程序目录/Bundles/模块A/模块A.dll
/程序目录/Bundles/模块A/Libs/
/程序目录/Bundles/模块A/Libs/* .dll
/程序目录/Bundles/模块B/
/程序目录/Bundles/模块C/
/程序目录/Libs/(可选)
/程序目录/OSGi.NET.properties
注:
程序目录中的Libs文件夹存放个Bundles的共享程序集(也可通过在配置文件中配置共享清单),如接口契约、公共第三方类库等。
模块A中的Libs文件夹存放其私有程序集。
Manifest.xml作为程序清单文件对模块进行自描述。
OSGi.NET.properties为框架内核配置文件

关于加载次序:
由于业务需求,各模块存在依赖关系的可能,所以模块加载也会有加载顺序的要求,此时可以通过清单文件中Manifest.xml,Bundle节点的StartLevel属性对其加载次序进行设置。数值越小,加载越前。 

关于Bundle引用程序集搜索原则:

  1. 根据加载的Bundle引用程序集,依据程序集名称+版本号匹配原则,优先从[/程序目录/Libs/]目录或共享清单中搜索。

  2. 如第一步无匹配,则根据程序集名称从[/程序目录/Bundles/模块A/Libs/*.dll]目录搜索,并将搜索到的程序集对应版本关联Bundle。

  3. 各Bundle下Libs目录程序集在加载中做了Bundle间的隔离,确保不同的Bundle引用的程序集间不会造成影响。即:如存在共享程序集请放置[/程序目录/Libs/]目录或在共享清单配置。

  • osgi.net是一个动态的模块化框架。它向用户提供了模块化与插件化、面向服务构架和模块扩展支持等功能。该平台是OSGi联盟定义的服务平台规范移植到.NET的实现。   简介 尤埃开放服务平台是一个基于.NET平台的动态的模块化中间件,它主要向用户提供了模块化与插件化、面向服务架构和模块扩展三大功能,适用于控制台、WinForm、Windows服务、WPF、ASP.NET和移动平台等各种.NET环

  • osgi.net是一个动态的模块化框架。它向用户提供了模块化与插件化、面向服务构架和模块扩展支持等功能。该平台是OSGi联盟定义的服务平台规范移植到.NET的实现。   简介 尤埃开放服务平台是一个基于.NET平台的动态的模块化中间件,它主要向用户提供了模块化与插件化、面向服务架构和模块扩展三大功能,适用于控制台、WinForm、Windows服务、WPF、ASP.NET和移动平台等各种.NET环

  • 1. 关于OSGI.NET 在介绍 OSGI.NET 前先介绍下OSGi, OSGI全称为Open Service Gateway Initiative,它一方面指由IBM、Oracle、BEA、SAP等国际IT巨头组成的OSGi联盟组织;另一方面指该组织制定的一个基于Java语言的服务规范——OSGi服务平台。而OSGi.NET是OSGi R4.2规范移植到.NET平台的实现,是一个动态模块化框

  • OSGI.NET发布网站(包含相关插件) A、按正常发布网站的方式,发布主程序(宿主),步骤如下:   1.选择要发布的网站“右键”-》“发布”   2.配置文件——新建自定义配置文件(名称随意)   3.连接——发布方法(选择“文件系统”)、目标位置(目录自定义)   4.设置——配置(选择“Release”)   5.预览——选择刚刚新建的配置文件,点击发布就OK了。 B、发布主程序(宿主)下

 相关资料
  • 第三方页内容由手百或第三方浏览器框架承载,以下是典型的结构示意,与其他浏览器的框架结构基本一致,在功能样式上可能有细节差别。 基准线和栅格能够让Web页面更有秩序,有利于进行页面布局。类似音乐训练中使用节拍来辅助节奏把握。 垂直方向采用4点基准线栅格来限定⻚面元素的高度,水平方向采用4/12列流式栅格辅助限定元素的宽度。 Web页面设计需要兼顾水平和垂直两个方向的页面元素布局。 4点基准线的基本单

  • 基本代码规范 本篇规范制定了代码基本元素的相关标准,以确保共享的PHP代码间具有较高程度的技术互通性。 关于「能愿动词」的使用 为了避免歧义,文档大量使用了「能愿动词」,对应的解释如下: 必须 (MUST):绝对,严格遵循,请照做,无条件遵守; 一定不可 (MUST NOT):禁令,严令禁止; 应该 (SHOULD) :强烈建议这样做,但是不强求; 不该 (SHOULD NOT):强烈不建议这样做

  • 这些插件是形成其他插件的基本构建模块.你可以在你的构建文件中使用它们,在下面李处完整地列表,然而,注意它们还不是Gradle的公用API的一部分.因此,这些插件未记录在用户指南中.你可能会参考他们的API文档,详细了解它们. Table 22.7. Base plugins base 添加标准的生命周期任务和配置合理的默认归档任务: 增加ConfigurationName任务.这些任务组装指定配置

  • 概述 环境配置 程序结构 基本语法 数据类型 类型转换 变量 常量和文字 运算符 判断 循环 封装 方法 可空类型 数组 字符串 结构体 枚举 类 继承 多态性 运算符重载 接口 命名空间 预处理指令 正则表达式 异常处理 文件 I/O

  • 数据类型说明 数据类型 16位平台 32位平台 64位平台 char 1 字节 1 字节 1 字节 pointer 2 字节 4 字节 8 字节 short 2 字节 2 字节 2 字节 int 2 字节 4 字节 4 字节 float 4 字节 4 字节 4 字节 double 8 字节 8 字节 8 字节 long 4 字节 4 字节 8 字节 long long 8 字节 8 字节 8 字节

  • RoadMap 指针与引用 左值引用与右值引用 C++专题-左值与右值 static 与 const https://github.com/huihut/interview#const static 作用 修饰普通变量,修改变量的存储区域和生命周期,使变量存储在静态区,在 main 函数运行前就分配了空间,如果有初始值就用初始值初始化它,如果没有初始值系统用默认值初始化它。 修饰普通函数,表明函数

  • 主要内容:基础类的功能如果您参考Apple文档,应该会看到框架的详细信息,如下所示。 框架定义了Objective-C类的基础层。 除了提供一组有用的原始对象类之外,它还引入了几个定义Objective-C语言未涵盖的功能的范例。 框架的设计考虑了这些目标 - 提供一小组基本实用程序类。 通过为解除分配等事项引入一致的约定,使软件开发更容易。 支持Unicode字符串,对象持久性和对象分发。 提供一定程度的操作系统独立

  • 当你定义一个类,你实际上定义的是一个数据类型的蓝图。实际上你并没有定义任何数据,但是它定义了类的名字意味着什幺。也就是说,一个类的对象由一些可以在该类上进行的操作构成。对象是类的实例。构成类的方法和变量被称为类的成员。 定义一个类 一个类定义以关键字 class 开始,其后跟的是类的名称;类的主体部分体由一对花括号括起来。以下是一个类定义的一般形式: class class_name {