基于ASP.NET MVC的热插拔模块式开发框架(OrchardNoCMS)--模块开发
之前文章中给大家说明了下我这个小小的想法,发现还是有不少人的支持和关注。你们的鼓励是对我最大的支持。
我总结了了大家的评论,有以下几个问题:
1.希望有更多的文档说明。
2.希望介绍下Orchard的热插拔机制。
3.希望可以说明如何扩展功能什么的。
4.介绍下Orchard的核心机制。
5. 介绍下我对Orchard的整个瘦身过程怎么做的。
6.觉得这个像瑞星杀毒只剩下小狮子了(这个有意思 J)
除了这些还有别的,我只是自己大概总结了下。
对于以上的问题,我不会挨个去说明。只是给大家说明下我的整个计划和接下来的安排。
首先,文档是必须的。可能在博客上未来不会有太多的文档,但是在github上你将会找到很多的说明文档。OrchardCMS的整个运作机制,确实是很庞大,很复杂的。对于大家都关注和好奇的热插拔,我不可能一下子就去介绍说明它,因为它依赖于Orchard CMS的其他好多功能和机制。比如:Shell的概念,Feature的加载机制,缓存机制,动态代理、HttpContent管理等。还有一些协调的方法类等。
从我接触OrchardCMS开始到现在也有两年了。开始试着去读它的源码,有点不靠谱,或者说对能力的要求比较高。所以试着从模块开发为出发点,慢慢的渗透,理解才是比较适合我们大多数人的方法。
所以还是从比较简单的模块开发来,中间会顺带的介绍一些OrchardCMS中的比较核心的内容。
1. 创建一个模块:
我保留了代码生成模块,不能通过手动创建模块,那样会疯掉的。所以首先需要去Tools文件夹下的Orchard/bin下把Orchard.exe拷贝到Web站点的bin目录下。
然后打开它,建议使用Powershell打开,容易粘贴复制。
使用codegen module Orchard.Car来生成一个Orchard.Car模块。
如果你使用过改模块,那么忽略这一节,往下看吧。
打开解决方案,在Modules文件夹下,右键选择‘添加’菜单,找到Orchard.Web文件夹下的Modules文件夹,选择刚才生成好的Orchard.Car。
添加完成后,我们就创建好了Orchard.Car模块。
2. 修改module.txt文件。
对于一个模块,这里需要理解什么是模块边界,就是这个模块能够放到容器里的所有触头。
OrchardNoCMS中一个模块的触头有以下几个:
也就是该模块必须有的部分。所以我们需要修改Module.txt文件,来确定模块以来的OrchardNoCMS版本号,以及模块的版本号。修改后的文档如下:
3. 创建Car的实体和关系映射。
现在我们需要的是车辆这个实体,包含名称、描述、价格、品牌、座位数几个属性。
对应的实体和数据库中表的关系映射,OrchardNoCMS会自己来完成。所以我们只是定义实体。
这里说明下Orchard是如何来找到需要创建映射关系的实体类。
首先需要关注的是CompositionStrategy 这个类。
看看它都干了什么。J。它通过找到命名空间以.Models结束的并且包含属性有Id这个字段的类作为需要创建mapping的实体。然后通过创建RecordBlueprint来告诉NHibernate你应该让哪个类映射到哪张表。
但是默认这里有很大的局限性。
比如:我的主键不想叫Id,我想叫tablename+Id,那怎么办呢?我的表名比较特殊,不能和类同名怎么办?不着急,后面会说明。
最终的实体关系映射会存放到APPData /site下某处,名字叫mapping.bin,你可以自己去找找看。
4. 创建Service
有了实体,接下来需要做的是创建一个Service。注意,如果你使用OrchardCMS,那么可以看到里面的数据库操作大都离不开内容管理。这里则直接是使用IRepository进行数据库操作。所以我们需要创建一个ICarInfoService接口,并实现它。
上图中圈住的IDependency这个 接口,是所有需要自动注入到Autofac容器的接口都需要继承的。
这里就需要说明一下Orchard的底层自动注入机制。看ShellContainerFactory.cs中的代码来完成所有的自动注入功能,同时它还结合Castle.DynamicProxy实现了AOP功能。所以大致来说,大部分的面向对象牛X的框架都离不开IoC和它上面的AOP。
对于不同的注入方式和AOP在别的文章里介绍吧。
5. 创建Controller和View
创建好实体后,我们创建一个新增记录的Action。
创建好对应的View,需要注意的是,这里Views文件夹下的子文件夹需要自己手动创建。
Index.cshtml为空,先不创建。本人的css不是很好,所以随便写了几个div。
6. 创建路由
如果不创建路由,也可以通过Orchard.car/Car/Add来访问上面创建的Action,但是我们为了简单,可以自己定义路由,所有自定义的路由都需要实现IRouteProvider这个接口。
现在就可以通过car/add来访问上面定义好的Action啦。
7. 创建数据库表
使用Orchard提供的DataMigration来创建表。方法如下:
8. 启用模块。
在刚才打开的orchard.exe中执行如下命令: feature enable orchard.car
以上完成模块的开发。
以上只是理想的状态。现实总是有很多变态的需求。也希望大家提出自己的问题。
待续。。。。。。。。。。。。。。
基于ASP.NET MVC的热插拔模块式开发框架(OrchardNoCMS)--模块开发的更多相关文章
- 基于ASP.NET MVC的热插拔模块式开发框架(OrchardNoCMS)介绍(二)
基于ASP.NET MVC的热插拔模块式开发框架(OrchardNoCMS)介绍(二) 之前文章中给大家说明了下我这个小小的想法,发现还是有不少人的支持和关注.你们的鼓励是对我最大的支持. 我总结了了 ...
- 基于ASP.NET MVC的热插拔模块式开发框架(OrchardNoCMS)--AOP编程
AOP编程在目前来说好像是大家都比较喜欢的.ASP.NET MVC中的Filter就是使用AOP实现的配置器模式.AOP在编码中的应用主要有如下几个方面: 日志记录,跟踪,优化和监控 事务的处理 持久 ...
- 基于ASP.NET MVC的热插拔模块式开发框架(OrchardNoCMS)--瘦身计划
Orchard CMS是针对CMS开发的,对于很多开发需求来说,内容管理这块儿可能并不需要,而需要它的模块式开发模式.所以我这里通过对OrchardCMS进行瘦身,去除 内容管理部分的内容,保留简单的 ...
- 基于ASP.NET MVC的热插拔模块式开发框架(OrchardNoCMS)--BootStrap
按照几个月之前的计划,也应该写一个使用Bootstrap作为OrchardNoCMS的UI库.之前这段时间都是在学习IOS开发,没顾得上写,也没顾得上维护OrchardNoCMS代码.看看我的活动轨迹 ...
- 基于ASP.NET MVC和Bootstrap搭建响应式个人博客站(一)
1.0 为什么要做这个博客站? www.zynblog.com 在工作学习中,经常要搜索查找各种各样的资料,每次找到相关资料后都会顺手添加到浏览器书签中,时间一长,书签也就满了.而且下次再点击这个 ...
- 转发-基于ASP.NET MVC 4/5 Razor的模块化/插件式架构实现
基于ASP.NET MVC 4/5 Razor的模块化/插件式架构实现 概述 在日常开发中, 我们经常谈起模块化/插件化架构,这样可既可以提高开效率,又可以实现良好的扩展性,尤其对于产品化的系统有 ...
- 基于ASP.NET MVC的快速开发平台,给你的开发一个加速度!
基于ASP.NET MVC的快速开发平台,给你的开发一个加速度! bingo炸了 2017/4/6 11:07:21 阅读(37) 评论(0) 现在的人做事情都讲究效率,最好能达到事半功倍那种效果,软 ...
- Asp.net Mvc模块化开发之“部分版本部分模块更新(上线)”
项目开发从来就不是一个简单的问题.更难的问题是维护其他人开发的项目,并且要修改bug.如果原系统有重大问题还需要重构. 怎么重构系统不是本文探讨的问题,但是重构后如何上线部署和本文关系密切.这个大家可 ...
- 使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 6 - 业务逻辑
翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 6 - 业务逻辑 Part 3: 设计逻辑层:核心开发 如前所述,我们的解决方案 ...
随机推荐
- WPF学习之路(七)应用程序和窗口
手动创建应用程序 1.创建Empty Project 2.添加引用 3.添加 ManualApp.cs 并添加下面的代码 [STAThread] public static void Main() { ...
- Oracle脚本笔记
//创建一个表create table 表名(字段名1 varchar2(20) not null);//多个用 , 隔开//添加字段alter table 表名add (字段名2 varchar2 ...
- C#语言——类
C#——类 一.String 类 系统内置的处理字符串类型的函数方法类.方便我们对字符串类型进行一系列的处理. 1.Length:获取字符串的长度,返回一个int类型的值 string x=Conso ...
- 让你脱离google不能访问的烦恼
大陆封了google已有20多天了,给开发者带来了许多不便.只需两步让你的google可以使用: 1.设置hosts: 访问:https://git.oschina.net/kawaiiushio/m ...
- Linux简介及常用命令使用2--linux常用命令:查看 删除 编辑 创建等
cd . // 进入当前目录 cd ~ //进入根目录 pwd //当前路径 echo "my name is makaidong">makai ...
- chrome浏览器首页被hao123劫持解决办法
在chrome浏览器设置里面将新标签页地址改为www.baidu.com, 不过一般来说这个办法完全没用,因为我们面对的是史无前例的大流氓. 查看桌面chrome的快捷方式是否被篡改.右键快捷方式,点 ...
- SQL Server中字符串转化为GUID的标量函数实现
还是工作中遇到的需求,有时候和外部的系统对接,进行数据的核对功能,外部的系统有时候主键字段列数据类是UNIQUEIDENTIFER(GUID)类型的字符串格式,去除了GUID格式中的分隔符“- ...
- 数据分页处理系列之三:Neo4j图数据分页处理
首先简单介绍下Neo4j,Neo4j是一个高性能的NOSQL图形数据库,它将结构化数据存储在网络上而不是表中,它是一个嵌入式的.基于磁盘的.具备完全的事务特性的Java持久化引擎,但是它将结构化数 ...
- Confluence自启动脚本
由于confluence用rc.local是无法自启动的,所以这里附上confluence的启动脚本 将以下脚本拷贝到/etc/init.d/confluenced # cd /etc/init.d/ ...
- Qt5.5.0使用mysql编写小软件源码讲解---顾客信息登记表
Qt5.5.0使用mysql编写小软件源码讲解---顾客信息登记表 一个个人觉得比较简单小巧的软件. 下面就如何编写如何发布打包来介绍一下吧! 先下载mysql的库文件链接:http://files. ...