这是大约在3-4年前完成的一个C#实现的OSGi框架,实现的过程参照了OSGi规范与与一些实现思路(感谢当时的那些资料与项目),此框架虽然仅在几个小型项目有过实际的应用,但OSGi的规范实现还是相对比较完整的,包涵了一些基本的要素,由于个人的项目重心已经转移,现在打算把它公开出来,供大家参考:

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/]目录或在共享清单配置。

Intro: http://www.diginfo.me/osgi-net-implement

源代码 https://github.com/FreezeSoul/OSGi.NET

说明文档 https://github.com/FreezeSoul/OSGi.NET/blob/master/OSGi.NET%20Client/Help/Help/Documentation.chm?raw=true

OSGi规范的C#实现开源的更多相关文章

  1. 重新诠释的OSGi规范

    上周五部门开会讨论新一代产品(基于.net Winform)的设计规范,从设计规范慢慢讨论到体系结构等架构存在的问题,诸如菜单.工具条.状态条.界面布局等不能实现配置化和自动化,子系统之间拥有强依赖, ...

  2. OSGi规范概要

    目前最新的OSGi规范是2012年7月发布的Release 5,Version5.0(后文简称为R5.0)版本,该规范定义了Java模块化系统所涉及的各种场景(开发.打包.部署.更新和交互等),以及其 ...

  3. 开源协议:LGPL协议、OSGi协议---打酱油的日子

    本文介绍开源的协议. LGPL 是 GNU Lesser General Public License (GNU 宽通用公共许可证)的缩写形式,旧称 GNU Library General Publi ...

  4. 开源协议:LGPL协议、OSGi协议

    本文介绍开源的协议. LGPL 是 GNU Lesser General Public License (GNU 宽通用公共许可证)的缩写形式,旧称 GNU Library General Publi ...

  5. OSGi——面向服务架构规范简述

    OSGi——面向服务架构规范简述 去年我们组要开发一个新的产品,在讨论产品架构路线的时候,美国的架构师向大家征集了架构设计思想(我推荐了SCSF),有一位工程师向他推荐了OSGi.以前我还没有听过OS ...

  6. Java模块化规范之争(转载)

    经过近20年的发展,Java语言已成为今日世界上最成功.使用的开发者人数最多的语言之一,Java世界中无数商业的或开源的组织.技术和产品共同构成了一个无比庞大的生态系统. 与大多数开发人员的普遍认知不 ...

  7. OSGi 对软件复杂度的影响

    出自 深度理解 osgi equinox 原理 1.2.1 OSGi 能让软件开发变得更容易吗 不可否认,OSGi 的入门门槛在 Java 众多技术中算是比较高的,相对陡峭的学习曲线会 为第一次使用 ...

  8. OSGI(面向Java的动态模型系统)

    基本简介编辑 OSGI服务平台提供在多种网络设备上无需重启的动态改变构造的功能.为了最小化耦合度和促使这些耦合度可管理,OSGi技术提供一种面向服务的架构,它能使这些组件动态地发现对方.OSGi联 O ...

  9. OSGI框架学习

    OSGI框架三个重要概念 OSGi框架是根据OSGi规范中定义的三个概念层设计的:模块.模块生命周期.服务. 模块层定义了OSGi模块的概念(bundle,即包含一个元数据MANIFEST.MF的JA ...

随机推荐

  1. Fis3前端工程化之项目实战

    Fis3项目 项目目录结构: E:. │ .gitignore │ fis-conf.js │ index.html │ package.json │ README.md │ ├─material │ ...

  2. 《Web 前端面试指南》1、JavaScript 闭包深入浅出

    闭包是什么? 闭包是内部函数可以访问外部函数的变量.它可以访问三个作用域:首先可以访问自己的作用域(也就是定义在大括号内的变量),它也能访问外部函数的变量,和它能访问全局变量. 内部函数不仅可以访问外 ...

  3. ABP文档 - 导航

    文档目录 本节内容: 创建菜单 注册导航供应器 显示菜单 每个web应用都有一些菜单用来在页面/屏幕之间导航,ABP提供了一个通用的基础框架创建并显示菜单给用户. 创建菜单 一个应用可能由不同模块组成 ...

  4. Java数据库连接技术——JDBC

    大家好,今天我们学习了Java如何连接数据库.之前学过.net语言的数据库操作,感觉就是一通百通,大同小异. JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力. JDBC API ...

  5. ASP.NET MVC5+EF6+EasyUI 后台管理系统(80)-自由桌面

    系列目录 前言 这次我们来做一个有趣的事情,有朋友跟做了很远,找我要自由桌面的代码,这次我们将演示自由桌面的代码. 自由桌面:用户可以随意增删改桌面的布局.个数(只留自己需要看到的数据),这次纯属Ea ...

  6. 千呼万唤始出来,微软Power BI简体中文版官网终于上线了,中文文档也全了。。

    前几个月时间,研究微软Power BI技术,由于没有任何文档和资料,只能在英文官网瞎折腾,同时也发布了英文文档的相关文章:系列文章,刚好上周把文章发布完,结果简体中文版上线了.哈哈,心里有苦啊,早知道 ...

  7. ES6的一些常用特性

    由于公司的前端业务全部基于ES6开发,于是给自己开个小灶补补ES6的一些常用特性.原来打算花两天学习ES6的,结果花了3天才勉强过了一遍阮老师的ES6标准入门(水好深,ES6没学好ES7又来了...) ...

  8. HTTP API接口安全设计

    HTTP API接口安全设计 API接口调用方式 HTTP + 请求签名机制   HTTP + 参数签名机制 HTTPS + 访问令牌机制 有没有更好的方案? OAuth授权机制 OAuth2.0服务 ...

  9. iOS 原生地图地理编码与反地理编码

    当我们要在App实现功能:输入地名,编码为经纬度,实现导航功能. 那么,我需要用到原生地图中的地理编码功能,而在Core Location中主要包含了定位.地理编码(包括反编码)功能. 在文件中导入 ...

  10. iOS从零开始学习直播之2.采集

      直播的采集由采集的设备(摄像头.话筒)不同分为视频采集和音频采集,本篇文章会分别介绍. 1.采集步骤   1.创建捕捉会话(AVCaptureSession),iOS调用相机和话筒之前都需要创建捕 ...