NET 平台下的插件化开发内核
.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 平台下的插件化开发内核的更多相关文章
- .NET 平台下的插件化开发内核(Rabbit Kernel)-转
什么是RabbitHub? RabbitHub 是专门针对 .NET 平台所设计.研发的一套相对完整的插件开发框架,它是由一个内核两大框架多个组件及一系列的开发时支持而构成. RabbitHub 架构 ...
- .NET 平台下的插件化开发内核(Rabbit Kernel)
每个程序猿都有一个框架梦,曾经在2013年8月15日写过一篇"Koala Framework是什么?我为什么要写这个框架?"的文章,在开放框架路上迈出了第一步,之后作者如愿找到了一 ...
- 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文件的方法数最大不能超 ...
随机推荐
- 科技股晴间多云 阿里京东IPO或受影响
微博的时间长达一个月的时间才上市.科技股一直笼罩. Facebook一个月股价下跌21.55%:特斯拉跌幅21.69%:亚马逊的股价相比,1一个月27日高点下跌22.13%. 以前的明星股票都已进入华 ...
- jQuery 有条件排序
尊重劳动成果,转载请注明出处(http://blog.csdn.net/sllailcp/article/details/41011173)... 点击button,表格里就会依照分数的高低.将学生信 ...
- [Cocos2d-x]在Cocos2d-x 3.x如何通过版本号WebSocket连接server数据的传输
WebSocket 首先新建一个空的目录,通过npm安装nodejs-websocket: npm install nodejs-websocket 新建app.js文件: var ws = requ ...
- POJ2352_Stars(段树/单点更新)
解决报告 意甲冠军: 坐标.查找在数星星的左下角每颗星星. 思考: 横轴作为间隔,已知的输入是所述第一到y排序再次x次序.每次添加一个点来查询点x多少分离开坐标,然后更新点. #include < ...
- MemoryBarrier,Volatile
使用MemoryBarrier,Volatile进行同步 上一节介绍了使用信号量进行同步,本节主要介绍一些非阻塞同步的方法.本节主要介绍MemoryBarrier,volatile,Interlock ...
- Codeforces 442B Andrey and Problem(贪婪)
题目链接:Codeforces 442B Andrey and Problem 题目大意:Andrey有一个问题,想要朋友们为自己出一道题,如今他有n个朋友.每一个朋友想出题目的概率为pi,可是他能够 ...
- BZOJ 3362 POJ 1984 Navigation Nightmare 并与正确集中检查
标题效果:一些养殖场是由一些南北或东西向的道路互连. 镶上在不断的过程中会问两个农场是什么曼哈顿的距离,假设现在是不是通信.那么输出-1. 思维:并与正确集中检查,f[i]点i至father[i]距离 ...
- Java它配备了一个很好的工具2
Jconsole 本机java自带的系统monitor具,它也可以连接到的本地远程连接java process,联系java process申请后可查看CPU,内存,主题.GC事件,能帮忙看看系统是否 ...
- Net 项目代码风格
.Net 项目代码风格要求 .Net 项目代码风格要求 PDF版下载:项目代码风格要求V1.0.pdf 代码风格没有正确与否,重要的是整齐划一,这是我拟的一份<.Net 项目代码风格要求&g ...
- webserver实现
最近的工作需求client和server使用https协议进行通讯,我负责client编写程序,在操作系统的-depth理解认为一旦前webserver实现,整理代码: #include"a ...