前言
在、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"} );
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]