摘要:
持续更新和调整中,本人学习笔记,非官方文档,难免疏漏,仅供参考。 OSGi.NET SDK下载地址。前言及环境准备模块化和插件化概念实例小结面向服务架构支持概念实例、小结 模块可扩展支持概念、实例小结热插拔与动态支持概念、实例、小结多环境支持高级话题如何划分模块? 阅读全文
摘要:
When setup isn't just xcopyWhat's WiX? What's MSI? and Wha't Orca?1) Quick Run an Installer with WiX2)Add UI to an Installer3)Create Shortcut/Registry in an Installer4)Do Pre-checking before install5)... 阅读全文
摘要:
【目录】-【高级话题】-【如何划分模块?】这应该是每次我们打算使用模块化框架来创建新的解决方案或者将已有程序重构时首先面对的一个问题。这里我们不谈详细的需求与功能点的探讨过程,直接拿假设的功能点作为讨论基础。比如我们现在准备实现一个简单的B/S的留言板程序,它需要如下功能 1) 留言信息展示 2) 增加留言信息 3) 管理员登陆 4) 管理员回复、删除留言 传统的三层架构划分大概是这个样子,一种典型的横向划分。你可以将他们放在一个解决方案里完成并发布 现在我们来看看,如何将他们拆分成OSGi.NET所推荐的模块方式。注意这里是物理和逻辑同时进行划... 阅读全文
摘要:
【目录】- 【多环境支持】 所谓的多环境支持,官方是这么介绍的 1) 支持控制台应用程序。 2) 支持Windows窗体应用程序。 3) 支持WPF应用程序。 4) 支持Windows服务应用程序。 5) 支持ASP.NET应用程序。 6) 支持Windows Mobile应用程序。 7) 支持UIOSP平台嵌套。 这个理解起来不难,主要是因为OSGi.NET是基于.NET框架且与语言以及类型无关,也就是说.NET能支持什么环境,OSGi.NET也就能支持什么环境,他能适应各种.NET生产和装配环境。 最新的版本已经可以支持MVC 3和4了。 我们已经在“模块化和插件化”... 阅读全文
摘要:
【目录】- 【热插拔与动态支持】-【概念】 “热插拔和动态支持”应该算是OSGi.NET最有趣,最Cool的一个功能,官方文档是这样介绍的 1) 热插拔:所有的模块都可以被动态的添加和卸载。 2) 生命周期:模块生命周期状态由“已安装、已解析、正在启动、已激活、正在停止、已停止、已卸载”组成,每一个生命周期状态下,模块提供的功能都可能不同。 3) 动态:当模块执行任何生命周期操作时,模块会动态的想外界暴露或者隐藏它提供的功能,比如动态提供服务、扩展或者其它功能。 4) 远程部署:支持模块远程部署,比如远程安装、启动、停止和卸载模块,或者订阅模块仓库中模块变更并同步。 正如我们前面一... 阅读全文
摘要:
Demo 点击下载【目录】- 【模块可扩展支持】-【小结】 通过上面的实例,我们可以具体体会到模块与模块之间的“动态信息注入”方式。这种方式的好处是 1) 首先,被注入方不需要知道将会被谁注入,保证了逻辑的单一性,易于横向扩展 2) 其次,注入的协议的可配置型,基于XML的描述,可实现很方便的修改和维护 3) 结合“接口加实现”的服务模式,可以快速整合各个模块的资源,实现了有效的“服务化” 上面的代码只是实现了注入,也就是当具体业务模块被运行环境加载后的被相应的处理模块识别并解析,但OSGi.NET也同时支持某个业务模块的动态抽离,在这里就是从处理模块中移除已注入信息。接下来我们来解... 阅读全文
摘要:
Demo 点击下载【目录】- 【模块可扩展支持】-【概念】 目前为止我们已经了解了模块化的隔离策略,面向服务的交互策略,现在就该来看看更高级的模块扩展策略,这里的“可扩展”在官方文档是这么介绍的 1) 扩展点:通过标准XML节点<ExtensionPoint>来定义一个模块向其它模块暴露的扩展点。暴露扩展点的模块会监听并处理其它模块对其的扩展。 2) 扩展:通过标准XML节点<Extension>来定义一个模块对暴露扩展点的模块的扩展。这个XML节点会通过扩展点变更事件传递到暴露扩展点的模块。 3) 动态扩展:模块在启动和停止时,会分别向平台注册和卸载相应的扩展点及扩展 阅读全文
摘要:
Demo 点击下载【目录】- 【面向服务架构支持】-【实例】 这次我们继续延续“模块化和插件化”那个实例来做展示。 现有的代码,主程序依赖接口和接口实现的Calculator.Demo1程序集,也就说主程序不仅得知道具体的接口定义,还得知道这个接口具体实现的定义。理论上说,这是面向对象,但也是紧耦合。如果你要替换成另外一个接口实现,你就得重新修改、编译、发布主程序。如何避免这种修改呢?可以通过服务总线来重构它、隔离它、松耦合它。 好在OSGi.NET的“服务总线”功能是以服务的形式发布的,有两种注册服务方式 1) 一个是在激活器当中,通过IBundleContext.AddServi... 阅读全文
摘要:
【目录】- 面向服务架构支持】-【概念】 面向服务的体系结构,SOA,也是OSGi.NET中一个重要功能,主要是为了各个模块可以以一种统一和通用的方式进行交互。官方文档是这么说的 1) 服务绑定模型:支持典型的“服务注册 – 服务搜索 – 服务绑定”的服务绑定模型。服务提供商想服务注册表注册服务,服务消费者搜索服务注册表并绑定需要的服务。 2) 接口与实现隔离:每一个服务由“接口 + 实现”组成,接口相当于服务契约,而实现则是实现服务接口的具体类的实例。 这里的“服务绑定模型”,像是一个服务总线,用来存储和检索各种服务。而SOA就是将应用程序的不同功能单元通过定义良好的接口和契约联系... 阅读全文
摘要:
【目录】-【模块化和插件化】-【小结】 现在我们来对OSGi.NET的“模块化和插件化”做一个小结,再次把官方的说明拿出来 1) 物理隔离:基于UIOSP开发的模块是一个物理隔离的可单独部署的模块,每一个模块拥有独立的文件夹、类型空间、资源和类加载器。模块间互相独立、互相隔离且互不影响。 a) 先看看上面实例目录结构 b) 很明显的看出,三个模块的确是被“隔离“在三个不同的文件夹内,且Calculator.Demo1和RemotingManagement、WebServiceWrapperService无依赖,即前者无法知道后两者是否存在,也不需要知道,他们相互不影响... 阅读全文
摘要:
Demo 点击下载【目录】-【模块化和插件化】-【实例】 假设我们准备做一个计算器,是的,先从最简单的加减乘除开始。 1) 先确定一下是命令行显示,.NET 4.5,C#,VS 2012的开发环境; 2) 第一阶段实现加减乘除功能,用户输入计算公式,回车,返回计算结果; 3) 其他问题待定。 OK,先来分析一下如何做。 1) 逻辑上,简单来说,核心在计算,一种输入,计算和输出的过程。 2) 其他的就是界面和异常了。 稍微具体点, 1) 设计一个接口ICalculate,有返回类型为string的方法Calculate,一个string类型的参数,计算公式。 2) 一个具体的... 阅读全文
摘要:
【目录】-【前言】 了解什么是OSGi.NET?得先从OSGi讲起,这个名词代表了两层意思,一个是组织,一个是规范。这个规范最初是为了能让更多不同规格和功能的嵌入式设备互通互联,互相协作搭建“智能运行平台”。了解这点很重要,它决定了我们能用OSGi来做什么。通俗的来说,OSGi搞定了如何将不同种类的“东西”集成到一块儿,并让他们和谐相处,就像是PC的“主板”,主板上面有CPU,有内存,有网卡,有声卡等等,他们通过主板这个载体连接在一起实现了PC的功能。当然OSGi不是某款特定主板,但你可以通过它搭建自己的主板。 说到”主板“,就不得不提”模块化“,这是PC之所以叫PC的根本。个人能简单的... 阅读全文