前言
在、ASP.NET MVC的开发中,我们创建完项目之后,ASP.NET MVC是已Model-Controller-View的形式存在的,在创建项目自动生成的内容上Model我们很容易分离成类库,所以这里不予说明,那么这时候我们就像Controller是不是也能够分离出去呢?答案是肯定的,下面我们探讨一下Controller如何分离出去。
这里我提供两种分离的方法,一是重写方法继承自IControllerFactory接口,实现里面的方法,二是MVC提供了直接在路由注册里面去控制控制器的书写,下面就这两种类型简单贴一下代码。
第一种方法
代码如下:当写完代码之后再路由中注册。提示:实现完成之后必须在路由规则方法(RegisterRoutes)里面进行注册,注册代码如下:
ControllerBuilder.Current.SetControllerFactory(new ControllersFactory("BookSystem_Controllers")); //BookSystem_Controllers为控制器的类库
// 源文件头信息: // <copyright file="ControllersFactory.cs"> // Copyright(c)2014-2034 Kencery.All rights reserved. // 创建人:韩迎龙(kencery) // 创建时间:2015-6-18 // </copyright> using System; using System.Reflection; using System.Web.Mvc; using System.Web.Routing; using System.Web.SessionState; namespace BookSystem_Controllers { /// <summary> /// 重写注册控制器的方法,使之能够将控制器管分离到其它类库中实现 /// <auther> /// <name>kencery</name> /// <date>2015-6-18</date> /// </auther> /// </summary> /// 说明:IControllerFactory接口含有三个需要实现的方法:CreateController,GetControllerSessionBehavior,ReleaseController /// 使用:在MVC App_Start文件夹中的RouteConfig中的方法RegisterRoutes中的第一行中写入下面注册语句,Global.asax中也可注册,放到注册路由之前即可 /// ControllerBuilder.Current.SetControllerFactory(new ControllersFactory("BookSystem_Controllers")); //BookSystem_Controllers为控制器的类库 public class ControllersFactory : IControllerFactory { private readonly string _assemblyName; private readonly string _controlerDefaultNameSpage; private Assembly _controllerAssembly; /// <summary> /// 获取控制器所在的程序集名称 /// </summary> public string AssemblyName { get { return _assemblyName; } } /// <summary> /// 获取控制器的默认命名空间 /// </summary> public string ControlerDefaultNameSpage { get { return _controlerDefaultNameSpage; } } /// <summary> /// 获取控制器所在的程序集的Assembly实例 /// </summary> public Assembly ControllerAssembly { get { return _controllerAssembly "assemblyName"></param> public ControllersFactory(string assemblyName) { _assemblyName = assemblyName; } /// <summary> /// 构造函数实例化 /// </summary> /// <param name="assemblyName"></param> /// <param name="controlerDefaultNameSpage"></param> public ControllersFactory(string assemblyName, string controlerDefaultNameSpage) { _assemblyName = assemblyName; _controlerDefaultNameSpage = controlerDefaultNameSpage; } /// <summary> /// 获取控制器类的全名 /// </summary> /// <param name="controllerName">控制器名称</param> public string GetControllerFullName(string controllerName) { return string.Format("{0}.{1}Controller", string.IsNullOrEmpty(ControlerDefaultNameSpage) "requestContext"></param> /// <param name="controllerName"></param> public IController CreateController(RequestContext requestContext, string controllerName) { var controller = ControllerAssembly.CreateInstance(GetControllerFullName(controllerName)) as Controller; if (controller == null) return null; if (controller.ControllerContext == null) { controller.ControllerContext = new ControllerContext(requestContext, controller); } else { controller.ControllerContext.RequestContext = requestContext; } return controller; } /// <summary> /// 返回请求的会话状态的支持类型 /// </summary> /// <param name="requestContext"></param> /// <param name="controllerName"></param> public SessionStateBehavior GetControllerSessionBehavior(RequestContext requestContext, string controllerName) { var controllerType = ControllerAssembly.GetType(GetControllerFullName(controllerName), true, true); var sessionStateAttr = Attribute.GetCustomAttribute(controllerType, typeof (SessionStateAttribute), false) as SessionStateAttribute; return sessionStateAttr == null "controller"></param> public void ReleaseController(IController controller) { var idDisposable = controller as IDisposable; if (idDisposable != null) { idDisposable.Dispose(); } } } }
第二种方法
路由注册方法代码如下:缺点是,如果有多个注册路由的规则,都必须记得添加namespaces属性,否则会出现错误
//系统默认路由 routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new {controller = "Login", action = "Index", id = UrlParameter.Optional}, namespaces: new string[] {"BookSystem_Controllers"} );
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 阿杜2024-时光音乐会[金蜂][WAV+CUE]
- 群星《燃!沙排少女 影视原声带》[FLAC/分轨][775.28MB]
- 群星《第6届2010十大发烧唱片精选》2CD [WAV+CUE][1.6G]
- 窦唯1994《黑梦》上海音像首版[WAV分轨][1G]
- 郭子.1996-为爱偷生(载歌载舞歌载戏“极度疯狂”唱作全纪录)【滚石】【WAV+CUE】
- 伍佰.2003-泪桥【艾回】【WAV+CUE】
- 南台湾小姑娘.1996-爱作梦的查某囡仔【大旗】【WAV+CUE】
- 群星《天碟落地-世界[HI-FI] 女声》[WAV分轨][1.1G]
- 黎明《但愿不只是朋友》2022蜚声环球限量版 [WAV+CUE][1G]
- 李玉刚《怀旧辑》玉泽东方[WAV+CUE][1.1G]
- 魔兽世界wlk刺杀贼一键输出宏是什么 wlk刺杀贼一键输出宏介绍
- 魔兽世界wlk战斗贼一键输出宏是什么 wlk战斗贼一键输出宏介绍
- 魔兽世界wlk敏锐贼一键输出宏是什么 wlk敏锐贼一键输出宏介绍
- 李逸朗2007-李威乐[英皇娱乐][WAV+CUE]
- DavidVersace-EyetoEye(2024)[24-44,1]