.NET 平台下的插件化开发内核(Rabbit Kernel)
每个程序猿都有一个框架梦,曾经在2013年8月15日写过一篇“Koala Framework是什么?我为什么要写这个框架?”的文章,在开放框架路上迈出了第一步,之后作者如愿找到了一份相对满意的工作,此时 Koala Framework 改名为 RabbitHub,并在该公司内部使用了一年多的时间之后的今天“RabbitHub(兔窝)” 家族中的老大哥 “Rabbit Kernel(兔子内核)” 正式与大家见面了。
什么是RabbitHub?
RabbitHub 是专门针对 .NET 平台所设计、研发的一套相对完整的插件开发框架,它是由一个内核两大框架多个组件及一系列的开发时支持而构成。
RabbitHub 架构图:

它为了解决什么?
一般公司内部的产品肯定是多元化的,而拥有的开发团队也不止一支,这样以来各个开发团队内部所使用的框架多多少少有一些不一致,从而导致技术无法共享、各个团队之间无法进行技术交流的僵局,各个团队还有可能对相差无几的功能重复开发,甚至导致服务器部署环境的不一致,浪费宝贵的资源与时间。
而采用 RabbitHub 后这些问题将有效的得到改善,由于 RabbitHub 是由处在最顶端的 Modules 层来决定最终系统的逻辑与 UI,所以除了 RabbitHub 为大家提供的强大功能外,公司或团队还可以围绕着 Rabbit Kernel 来开发新的层或组件以得到共用、共享,其他的开发团队就无需开发重复的功能,最多只是扩展现有层的功能来支持最新的需求,而这些通用的层就是公司以后开发新的产品很有力的基石,也是公司宝贵的一笔财富。
它提供了什么?RabbitHub现状。
核心
Rabbit Kernel
一个轻量级的内核。
Rabbit.Web
针对 Web 的框架。
Rabbit.Web.Mvc
针对 ASP.NET MVC 的框架。
Rabbit.Web.WebForms
针对 ASP.NET WebForms 的框架。
组件
- 基于 EntityFramework 的数据组件
- 基于 NLog 的日志实现。
- 基于 FluentMigrator 的数据迁移组件。
- 基于 SignalR 的总线实现。
- 安全组件。
- 与 SignalR 组件的集成适配器。
- 用于 Web 项目的快速启动器。
- ……
支持
- Visual Studio 扩展插件。
- Visual Studio 项目模板。
- 批量 Modules 发布工具。
- 命令行工具。
- ……
支持的 .NET Framework 版本
RabbitHub 全系列至少使用 .NET Framework 4 或以上.NET Framework版本才可使用。
什么是Rabbit Kernel?
Rabbit Kernel是整个Rabbit Hub的核心,Kernel内不仅包含了扩展引擎、租户引擎、工作引擎,同时还抽象了Bus、Caching、FileSystems、Localization、Logging这些常用组件的抽象与部分实现。
Rabbit Kernel 最大层度上保证了 Kernel 的纯净性、除了必须的 IOC 组件 Autofac 外只依赖 FCL(Framework Class Library)而不再依赖其它任何类库。所以 Kernel 内部组件的设计尽量保证可扩展性与灵活度牺牲了一些 API 的友好性,甚至部分组件不提供具体的功能实现(如:Caching、Logging)。
Rabbit Kernel 会一直在精简依赖的组件的同时保证其强大的可扩展性,为宿主应用提供一个轻量且强大的微内核。
支持的环境
- ASP.NET MVC
- Console Application
- Windows Service
- WPF
- WinForm
- WebForm
- Mono
- ……
功能
扩展引擎
Rabbit Kernel最核心的理念就是一切皆是扩展,并且扩展是可以进行热拔插的,Kernel内部提供了一个强大的扩展引擎,可以适应各种功能类型的扩展,如:Component、Module、Theme。
多租户
Rabbit Kernel从底层考虑了多租户的相关内容,从底层直接对对象进行了隔离,最大程度上减少开发者在开发业务模块时需要考虑多租户相关的内容,并且保证了数据的安全。
Works
Work类似于电脑安全领域中的Sandboxie(沙盒),以保证对象独立的工作区,也在一定程度上防止了内存泄漏(因为当Work工作区被释放时Work中所有的对象也将被释放)。
一个宿主中可以有多个Work工作区。
基于Rabbit Kernel的Demo?
写了一个基于 WinForm 的 Demo,非常的简单,因为本篇只打算介绍,后续文章中会写一些相对复杂一些的 Demo。
Demo 运行效果图:
主要由两个菜单项构成,WinForm 菜单项是在主界面中显示一个窗体,MessageBox 是以弹出框的形式直接进行提示。


其中 Hello World 来自项目中的插件:Rabbit.HelloWorld。
根据上面的 Demo 效果可以很容易的看懂下面的代码,我就不画蛇添足的进行解释了。


Demo下载
https://github.com/majian159/RabbitDemo
基于 RabbitHub 的案例
出于隐私保护的原因这边不写出具体的公司名称,只写相关的一些情况。
目前 RabbitHub 框架部分被应用在两家公司,三个商业性产品上(移动端、PC端、政府系统)。
经历过一年多的风雨,这三款产品有着不错的稳定性及不错的销售业绩。
RabbitHub 中的部分组件已在 NuGet 中发布有着近 3000 的安装量。

详情戳下面的文章:
开源是一种态度、分享是一种精神 — FirApi发布、WeiXinApi更新
Bootstrap for MVC:Html.Bootstrap().TextBoxFor(model=>model.Name)
在小的个体,也有自己的官网
跟众多项目一样,RabbitHub 也有着自己简陋的官网,请戳:http://www.rabbithub.com/。
由于备案和服务器的关系目前官网挂在香港,可能会比较慢。
发布方式
目前 RabbitHub 所有的项目都托管在微软的 TFS 上,将来打算迁移至 GitHub 从 Demo 的托管就可以看出来,至于为什么,微软给了最好的证明。
收不收费?
现在当然不,以后也绝对不,永久免费(也没有必要收费)。
ps:限本篇文章中提及的内容(因为考虑后面会推出 工作流引擎、表单引擎 等相关系统还没有考虑好是否收费)。
开不开源?
相关项目最后肯定会开源,只是选择一个对的时机,现在的 RabbitHub 面向大众显得还相当稚嫩,作者会在 Fix 了相关 Bug 后择机进行开源。
ps:会按时机推出已经准备好开源的项目,但不一定所有项目都进行开源,在完善好后在进行考虑,就目前来说 Rabbit Kernel 是肯定会进行开源的,目前打算采用 Apache 协议。
联系方式
QQ讨论群:384413261
作者Email:majian159@live.com
为什么执着于框架?
开发 RabbitHub 耗费了我不少的时间与精力,在同样时间与精力的消耗下其实完全可以接点私单赚些外快,再或者写一些组件、SDK,效果可能要比 RabbitHub 好的多。为了 RabbitHub 我不在接私单,哪怕很诱人。
2014年微软宣布了 .NET 平台中的部分将开源、跨平台,沉寂已久的 .NET 社区再次有了新的活力,很多人期盼着新的组件、新的技术的出现来解决目前的一些情况,相比 Java 社区 .NET 缺少了太多太多,而 RabbitHub 就是为了给 .NET 社区添砖加瓦的一次尝试,在此呼吁大家多为社区做出贡献,多开放、共享一些项目和解决方案。
总而言之,开发 RabbitHub 是为了锻炼自身,也像是看着 .NET 变的越来越好,不论社区或 .NET 平台。
感谢的人
在框架的路上一路走来有着许许多多的心酸与打击,时而兴奋时而沮丧时而激动的欢呼时而无奈的叹息,不论如何作者还是坚持下来了,就算现在的框架还不是非常稳定与完善但也一步一步塌下每一步脚印每一个印记都在记录着成长不论是 RabbitHub 还是作者本身。需要感谢的人有很多很多。
感谢现在所在的公司信任并完全采纳了 RabbitHub,也给了作者一定的自由度来推动 RabbitHub 的发展,谢谢我的头不计后果的信任我。
感谢之前的公司的锻炼才让我在短短两年内完成了不可量计的技术积累。
感谢所有给过 RabbitHub 建议与鼓励的人。
感谢 Orchard。
感谢那些曾经带给我挫败感的人。
最后感谢给我推荐的人^_^。
.NET 平台下的插件化开发内核(Rabbit Kernel)的更多相关文章
- NET 平台下的插件化开发内核
.NET 平台下的插件化开发内核(Rabbit Kernel) 每个程序猿都有一个框架梦,曾经在2013年8月15日写过一篇“Koala Framework是什么?我为什么要写这个框架?”的文章, ...
- .NET 平台下的插件化开发内核(Rabbit Kernel)-转
什么是RabbitHub? RabbitHub 是专门针对 .NET 平台所设计.研发的一套相对完整的插件开发框架,它是由一个内核两大框架多个组件及一系列的开发时支持而构成. RabbitHub 架构 ...
- TinyFrame升级之八:实现简易插件化开发
本章主要讲解如何为框架新增插件化开发功能. 在.net 4.0中,我们可以在Application开始之前,通过PreApplicationStartMethod方法加载所需要的任何东西.那么今天我们 ...
- Android插件化开发
客户端开发给人的印象往往是小巧,快速奔跑.但随着产品的发展,目前产生了大量的门户型客户端.功能模块持续集成,开发人员迅速增长.不同的开发小组开发不同的功能模块,甚至还有其他客户端集成进入.能做到功能模 ...
- Android 使用动态载入框架DL进行插件化开发
如有转载,请声明出处: 时之沙: http://blog.csdn.net/t12x3456 (来自时之沙的csdn博客) 概述: 随着应用的不断迭代.应用的体积不断增大,项目越来越臃肿,冗余添 ...
- Android插件化开发---执行未安装apk中的Service
欢迎各位增加我的Android开发群[257053751] 假设你还不知道什么叫插件化开发.那么你应该先读一读之前写的这篇博客:Android插件化开发,初入殿堂 上一篇博客主要从总体角度分析了一下 ...
- 插件化开发—动态加载技术加载已安装和未安装的apk
首先引入一个概念,动态加载技术是什么?为什么要引入动态加载?它有什么好处呢?首先要明白这几个问题,我们先从 应用程序入手,大家都知道在Android App中,一个应用程序dex文件的方法数最大不能超 ...
- Eclipse平台下配置Go语言开发环境(Win7)
<Go语言编程>中写到:“从功能和易用性等方面考虑, Eclipse+GoEclipse.LiteIDE这两个环境在所有IDE里面是表现最好的”,所以笔者打算采用Eclipse+GoEcl ...
- 插件化开发—动态载入技术载入已安装和未安装的apk
首先引入一个概念,动态载入技术是什么?为什么要引入动态载入?它有什么优点呢?首先要明确这几个问题.我们先从 应用程序入手,大家都知道在Android App中.一个应用程序dex文件的方法数最大不能超 ...
随机推荐
- 这些web前端特效你造吗?
友情提示:所有特效效果均是GIF图片演示(均有源码下载),所以这个博文可能加载的比较慢,请谅解. 凛冬将至(Winter Is Coming),在上一篇博客凛冬将至,用几款特效暖暖身得到了比较好的响应 ...
- jquery 基础教程[温故而知新二]
子曰:“温故而知新,可以为师矣.”孔子说:“温习旧知识从而得知新的理解与体会,凭借这一点就可以成为老师了.“ 尤其是咱们搞程序的人,不管是不是全栈工程师,都是集十八般武艺于一身.不过有时候有些知识如果 ...
- iOS同一项目多个Target的快速实现方法
之前写过这种场景下的项目,比如类似滴滴的司机端和乘客端,学生端和教师端等等.. 最近有人问我,就整理记录如下: 1.正常新建一个项目,完成后 如下: 2.这一步就是添加一个新的target 3.添加 ...
- MicroCube 风力发电装置
这个叫做 MicroCube 的发电装置其实是一套「小型风扇+发电机」的组合,能够输出三相交流电,之后转换成直流电给电池组充电. 一个 MicroCube 长宽高均为 23 厘米左右,重约 1.4 公 ...
- TCP的关闭,到底是几次握手,每次的标志位到底是什么!
做题的时候遇到一个问题,TCP关闭的时候到底是三次还是四次握手,如果是三次,少了哪部分? 按照 <计算机网络> -第五版-谢希仁 然而对于TCP关闭, 有的地方能找到 ...
- mapred-site.xml 配置在线更新
环境:ibm jdk , cdh2.35.0.2 需求:更新mapred-site.xml 中的mapreduce.map.java.opts 和 mapreduce.reduce.java.opts ...
- IE自动跳转到标准模式
<meta http-equiv="X-UA-Compatible" content="IE=edge">
- 偷懒的一天-jQuery之事件与应用
hi 睡得恍恍惚惚不知精神为何物了 1.jQuery -----事件与应用----- ----页面加载时触发ready()事件 ready()事件类似于onLoad()事件,但前者只要页面的DOM结构 ...
- Virtual Box常用指令
以下操作需在命令行里将当前路径设为 Virtual Box安装目录 1. 调整磁盘大小(只能调整动态分配的.vdi格式文件) VBoxManage modifyhd "xxx.vdi&quo ...
- 给IIS添加CA证书以支持https
一.在IIS中生成Certificate Signing Request (CSR) 个人理解:生成CSR就是生成“私钥/公钥对”之后从中提取出公钥. 1. 打开IIS Manager,在根节点中选择 ...