目前为止我们已经了解了模块化的隔离策略,面向服务的交互策略,现在就该来看看更高级的模块扩展策略,这里的“可扩展”在官方文档是这么介绍的 1) 扩展点:通过标准XML节点<ExtensionPoint>来定义一个模块向其它模块暴露的扩展点。暴露扩展点的模块会监听并处理其它模块对其的扩展。 2) 扩展:通过标准XML节点<Extension>来定义一个模块对暴露扩展点的模块的扩展。这个XML节点会通过扩展点变更事件传递到暴露扩展点的模块。 3) 动态扩展:模块在启动和
这次我们继续延续“模块化和插件化”那个实例来做展示。 现有的代码,主程序依赖接口和接口实现的Calculator.Demo1程序集,也就说主程序不仅得知道具体的接口定义,还得知道这个接口具体实现的定义。理论上说,这是面向对象,但也是紧耦合。如果你要替换成另外一个接口实现,你就得重新修改、编译、发布主程序。如何避免这种修改呢?可以通过服务总线来重构它、隔离它、松耦合它。 好在OSGi.NET的“服务总线”功能是以服务的形式发布的,有两种注册服务方式 1) 一个是在激活器当中,通过IBun
面向服务的体系结构,SOA,也是OSGi.NET中一个重要功能,主要是为了各个模块可以以一种统一和通用的方式进行交互。官方文档是这么说的 1) 服务绑定模型:支持典型的“服务注册 – 服务搜索 – 服务绑定”的服务绑定模型。服务提供商想服务注册表注册服务,服务消费者搜索服务注册表并绑定需要的服务。 2) 接口与实现隔离:每一个服务由“接口 + 实现”组成,接口相当于服务契约,而实现则是实现服务接口的具体类的实例。 这里的“服务绑定模型”,像是一个服务总线,用来存储和检索各种服务。而SOA就
现在我们来对OSGi.NET的“模块化和插件化”做一个小结,再次把官方的说明拿出来 1) 物理隔离:基于UIOSP开发的模块是一个物理隔离的可单独部署的模块,每一个模块拥有独立的文件夹、类型空间、资源和类加载器。模块间互相独立、互相隔离且互不影响。 a) 先看看上面实例目录结构 b) 很明显的看出,三个模块的确是被“隔离“在三个不同的文件夹内,且Calculator.Demo1和RemotingManagement、WebServiceWrapperService无依赖,即前者无法知道
假设我们准备做一个计算器,是的,先从最简单的加减乘除开始。 1) 先确定一下是命令行显示,.NET 4.5,C#,VS 2012的开发环境; 2) 第一阶段实现加减乘除功能,用户输入计算公式,回车,返回计算结果; 3) 其他问题待定。 OK,先来分析一下如何做。 1) 逻辑上,简单来说,核心在计算,一种输入,计算和输出的过程。 2) 其他的就是界面和异常了。 稍微具体点, 1) 设计一个接口ICalculate,有返回类型为string的方法Calculate,一个string
这算是OSGi的基础和灵魂,没有他,后面将要介绍的很多功能都会黯然失色。 先看文档怎么说: 1) 物理隔离:基于UIOSP开发的模块是一个物理隔离的可单独部署的模块,每一个模块拥有独立的文件夹、类型空间、资源和类加载器。模块间互相独立、互相隔离且互不影响。 2) 高度可重用:模块的重用不需要再更改任何代码,只需要将模块拷贝到UIOSP指定的插件目录下,它的功能便向其它模块暴露。 3) 规范化:模块具有统一的标准,每一个模块的目录结构、模块配置都是统一的,开发方法也完全一致。 4) 快速
了解什么是OSGi.NET?得先从OSGi讲起,这个名词代表了两层意思,一个是组织,一个是规范。这个规范最初是为了能让更多不同规格和功能的嵌入式设备互通互联,互相协作搭建“智能运行平台”。了解这点很重要,它决定了我们能用OSGi来做什么。通俗的来说,OSGi搞定了如何将不同种类的“东西”集成到一块儿,并让他们和谐相处,就像是PC的“主板”,主板上面有CPU,有内存,有网卡,有声卡等等,他们通过主板这个载体连接在一起实现了PC的功能。当然OSGi不是某款特定主板,但你可以通过它搭建自己的主板。
持续更新和调整中,本人学习笔记,非官方文档,难免疏漏,仅供参考。 OSGi.NET SDK下载地址。前言及环境准备模块化和插件化概念实例小结面向服务架构支持概念实例、小结模块可扩展支持概念、实例小结热插拔与动态支持概念、实例、小结多环境支持高级话题如何划分模块?
勇哥想附加一个sql server的数据库,结果报错,说这个数据库是用高版本创建的,又遇到该死的版本问题了。于是想到怎么不用sql server management studio打开个数据库,这样我起码可以抄一下表结构,重建数据表。勇哥先打开vs2019,这已经是勇哥电脑里最高版本的vs了,这样确保比数据库文件的版本要高了。然后随便新建一个C#工程,在项目中点击工具→连接到数据库,选择数据库文件。然后就看到表了!!还可以切换到另一种数据库表浏览模式,这样表的结构都可以看到了!话说,要为vs这个
今天勇哥看到下面这种现象:propertygrid.SelectedObject 挂接的对象属性灰度不可以编辑有点奇怪,想不到为什么,后来发现是属性set被置为private了,去掉了即可以了。[Config, Description("测量框的行"), Category("HalconLineObj")]
public doub