mvc4 基于Area实现插件模块化开发
对于一个较大规模的Web应用,可以从功能上通过Area将其划分为为较小的单元。每个Area相当于一个独立的子系统,具有一套包含Model、Views和Controller在内
的目录结构和配置文件。一般来说,每个Area具有各自的路由规则,而基于Area的路由映射通过System.Web.Mvc.AreaRegistration注册。
先来看下整体结构:
LoonMvc4是正常的mvc4项目,loon.plugin1和loon.plugin2是普通类库项目,接下来我们来看下怎么使得loog.plugin1成为一个独立的模块。
loon.plugin1是普通的类库项目。我们需要在类库中加入对mvc的支持,诸如引入:system.Web,System.Web.Mvc等使得该类库具有mvc的特质。接下来比较重要的一步,Area隆重登场,这里边需要注意,使用area 路由的话,引用必须包含System.Web.Mvc后方才可以使用。仔细看上边示意图,有一个文件名字较长就是“LoonPlugin1AreaRegistration.cs”。我们来关注一下LoonPlugin1AreaRegistration.cs这个文件。我们来看内部代码:
namespace loon.plugin1
{
public class LoonPlugin1AreaRegistration : AreaRegistration
{
public override string AreaName
{
get { return "LoonPlugin1"; }
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"LoonPlugin1",//路由名字,必须唯一
"LoonPlugin1/{controller}/{action}/{id}",//路由规则
new { controller = "Test", action = "Index", id = UrlParameter.Optional }//默认值
);
}
}
}
注:要使我们的Area发挥作用,必须继承AreaRegistration,而且我们的LoonPlugin1AreaRegistration 类的修饰符必须为 public。
完成了解完以上的代码之后,我们在loon.plugin1中创建一个controller,作为测试.如我们创建一个CustomerController.代码如下:
using System;
using System.Web;
using System.Web.Mvc;
using System.Collections.Generic;
using loon.plugin1.Domain;
using loon.plugin1.Repository;
using Microsoft.Practices.Unity; namespace loon.plugin1
{
public class CustomerController : Controller{ [Dependency]
public CustomerRepository customerRepository{get;set;} [HttpGet]
public ActionResult Index()
{
//Dictionary<string, object> dic = new Dictionary<string, object>();
//dic.Add("id", 100);
//dic.Add("name", "hello"); return Json(new {customer=this.customerRepository.GetAll(),message="loon.plugin1.CustomerController"}, JsonRequestBehavior.AllowGet);
}
}
}
我们还有重要的一步需要设置:在loon.plugin1类库中属性,将其生成目录放到LoonMvc4下,这一步超级重要,生成到主项目目录下之后,mvc就会根据路由找到并解析路由地址并完成请求:如图所示
loon.plugin2的创建和配置和loon.plugin2一样。
然后整体运行解决方案,点击F5.
注:我们可以反回去看一下,LoonPlugin1是我们loon.plugin1中定义路由的名字,customer是Controller的名字。
你看懂了吗?至于customer中的值是怎么来的,欢迎关注我么下篇博客 mvc4+nhibernate+mysql 插件式编程。
如果有什么问题,欢迎批评指正。
mvc4 基于Area实现插件模块化开发的更多相关文章
- 基于AppDomain的"插件式"开发
很多时候,我们都想使用(开发)USB式(热插拔)的应用,例如,开发一个WinForm应用,并且这个WinForm应用能允许开发人员定制扩展插件,又例如,我们可能维护着一个WinService管理系统, ...
- C#学习笔记-----基于AppDomain的"插件式"开发
很多时候,我们都想使用(开发)USB式(热插拔)的应用,例如,开发一个WinForm应用,并且这个WinForm应用能允许开发人员定制扩展插件,又例如,我们可能维护着一个WinService管理系统, ...
- android 基于dex的插件化开发
安卓里边可以用DexClassLoader实现动态加载dex文件,通过访问dex文件访问dex中封装的方法,如果dex文件本身还调用了native方法,也就间接实现了runtime调用native方法 ...
- 大熊君JavaScript插件化开发------(第一季)
一,开篇分析 Hi,大家!大熊君又来了,今天这系列文章主要是说说如何开发基于“JavaScript”的插件式开发,我想很多人对”插件“这个词并不陌生, 有的人可能叫“组件”或“部件”,这不重要,关键是 ...
- JavaScript插件化开发
大熊君JavaScript插件化开发 一,开篇分析 Hi,大家好!大熊君又和大家见面了,还记得昨天的那篇文章吗------这个系列的开篇(第一季).主要讲述了以“jQuery的方式如何开发插件”, 那 ...
- 基于OSGI.NET的MVC插件式开发
最近在研究OSGI.NET插件式开发框架.官方网站提供了一个基于OSGI.NET的插件仓库.下载官方的SDK包安装后VS项目模板会多出一组iOpenWorks项目模板.在学习过程中,发现通过iOpen ...
- 基于vue模块化开发后台系统——准备工作
文章目录如下:项目效果预览地址项目开源代码基于vue模块化开发后台系统--准备工作基于vue模块化开发后台系统--构建项目基于vue模块化开发后台系统--权限控制 前言 本文章是以学习为主,练习一下v ...
- 基于vue模块化开发后台系统——构建项目
文章目录如下:项目效果预览地址项目开源代码基于vue模块化开发后台系统--准备工作基于vue模块化开发后台系统--构建项目基于vue模块化开发后台系统--权限控制 前言 在熟悉上一篇说到准备工具之后, ...
- 基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件[转]
上一篇文章介绍到怎么在自己的Java环境中搭建openfire插件开发的环境,同时介绍到怎样一步步简单的开发openfire插件.一步步很详细的介绍到简单插件开发,带Servlet的插件的开发.带JS ...
随机推荐
- Windows server 2012 各版本 激活方法
Windows server 2012 激活教程 本文包括以下两种版本的激活过程:(注意RC版的是不能激活的!) 1.Windows server 2012 试用版本激活 2.Windows serv ...
- Swift--存储属性-备
Swift中的属性分为存储属性和计算属性,存储属性就是Objective-C中的数据成员,计算属性不存储数据,但可以通过计算其他属性返回数据. 存储属性可以存储数据,分为常量属性(用关键字let定义) ...
- 安装Visual Studio 2010之后怎样安装MSDN Library
这篇博客参考自:http://justargon.blog.163.com/blog/static/21394413020134100737688/ MSDN2010安装及使用(MSDN Librar ...
- Qt跨线程信号和槽的连接(默认方式是直连和队列的折中)
Qt支持三种类型的信号-槽连接:1,直接连接,当signal发射时,slot立即调用.此slot在发射signal的那个线程中被执行(不一定是接收对象生存的那个线程)2,队列连接,当控制权回到对象属于 ...
- Thunderbird Mail 支持 Microsoft Exchange
Thunderbird地址:https://www.mozilla.org/en-US/thunderbird/ 插件下载地址:https://addons.mozilla.org/zh-CN/thu ...
- 鼠标键盘无法进入:(EE) config/hal: couldn’t initialise context: (null)
vi /var/log/Xorg.0.log 发现有一行:(EE) config/hal: couldn’t initialise context: (null) 在xorg.conf里面加上下面选项 ...
- DOS批处理命令判断操作系统版本、执行各版本对应语句
DOS批处理命令判断操作系统版本.执行各版本对应语句 昨天在家里试用 netsh interface ip set address 这些命令更改上网IP.DNS.网关等,今天将那些代码拿来办公室 ...
- OpenCV的矩阵合并方法
有的时候我们需要将几个矩阵按行或者按列进行合并成一个大矩阵,这在Matlab里面非常的简单,但在OpenCV里面并没有这样的方法,现在我在OpenCV的源码里面发现合并矩阵的方法,分享给大家. A = ...
- Android应用盈利广告平台的嵌入方法详解
一.如何学习Android android开发(这里不提platform和底层驱动)你需要对Java有个良好的基础,一般我们用Eclipse作为开发工具.对于过多的具体知识详细介绍我这里不展开,我只 ...
- docke 网络配置2
一,docker 的bridge模式是和vmware中的nat模式类似的,但是如果想要弄成和vmwae中的bridge怎么办呢? 说明,bridge模式获取的Ip是与宿主机的ip是出于同一个网段的. ...