亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

ASP.NET MVC中將控制器分離到類庫的實現

2024-07-10 13:29:10
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了ASP.NET MVC中將控制器分離到類庫的實現的相關資料,需要的朋友可以參考下

前言

在、ASP.NET MVC的開發中,我們創建完項目之后,ASP.NET MVC是已Model-Controller-View的形式存在的,在創建項目自動生成的內容上Model我們很容易分離成類庫,所以這里不予說明,那么這時候我們就像Controller是不是也能夠分離出去呢?答案是肯定的,下面我們探討一下Controller如何分離出去。

這里我提供兩種分離的方法,一是重寫方法繼承自IControllerFactory接口,實現里面的方法,二是MVC提供了直接在路由注冊里面去控制控制器的書寫,下面就這兩種類型簡單貼一下代碼。

第一種方法

代碼如下:當寫完代碼之后再路由中注冊。提示:實現完成之后必須在路由規則方法(RegisterRoutes)里面進行注冊,注冊代碼如下:

ControllerBuilder.Current.SetControllerFactory(new ControllersFactory("BookSystem_Controllers")); //BookSystem_Controllers為控制器的類庫

 

 
  1. // 源文件頭信息: 
  2. // <copyright file="ControllersFactory.cs"> 
  3. // Copyright(c)2014-2034 Kencery.All rights reserved. 
  4. // 創建人:韓迎龍(kencery) 
  5. // 創建時間:2015-6-18 
  6. // </copyright> 
  7.  
  8. using System; 
  9. using System.Reflection; 
  10. using System.Web.Mvc; 
  11. using System.Web.Routing; 
  12. using System.Web.SessionState; 
  13.  
  14. namespace BookSystem_Controllers 
  15. /// <summary> 
  16. /// 重寫注冊控制器的方法,使之能夠將控制器管分離到其它類庫中實現 
  17. /// <auther> 
  18. /// <name>kencery</name> 
  19. /// <date>2015-6-18</date> 
  20. /// </auther> 
  21. /// </summary> 
  22. /// 說明:IControllerFactory接口含有三個需要實現的方法:CreateController,GetControllerSessionBehavior,ReleaseController 
  23. /// 使用:在MVC App_Start文件夾中的RouteConfig中的方法RegisterRoutes中的第一行中寫入下面注冊語句,Global.asax中也可注冊,放到注冊路由之前即可 
  24. /// ControllerBuilder.Current.SetControllerFactory(new ControllersFactory("BookSystem_Controllers")); //BookSystem_Controllers為控制器的類庫 
  25. public class ControllersFactory : IControllerFactory 
  26. private readonly string _assemblyName; 
  27. private readonly string _controlerDefaultNameSpage; 
  28. private Assembly _controllerAssembly; 
  29.  
  30. /// <summary> 
  31. /// 獲取控制器所在的程序集名稱 
  32. /// </summary> 
  33. public string AssemblyName 
  34. get { return _assemblyName; } 
  35.  
  36. /// <summary> 
  37. /// 獲取控制器的默認命名空間 
  38. /// </summary> 
  39. public string ControlerDefaultNameSpage 
  40. get { return _controlerDefaultNameSpage; } 
  41.  
  42. /// <summary> 
  43. /// 獲取控制器所在的程序集的Assembly實例 
  44. /// </summary> 
  45. public Assembly ControllerAssembly 
  46. get 
  47. return _controllerAssembly ?? (_controllerAssembly = Assembly.Load(AssemblyName)); //加載控制器信息 
  48.  
  49. /// <summary> 
  50. /// 構造函數實例化 
  51. /// </summary> 
  52. /// <param name="assemblyName"></param> 
  53. public ControllersFactory(string assemblyName) 
  54. _assemblyName = assemblyName; 
  55.  
  56. /// <summary> 
  57. /// 構造函數實例化 
  58. /// </summary> 
  59. /// <param name="assemblyName"></param> 
  60. /// <param name="controlerDefaultNameSpage"></param> 
  61. public ControllersFactory(string assemblyName, string controlerDefaultNameSpage) 
  62. _assemblyName = assemblyName; 
  63. _controlerDefaultNameSpage = controlerDefaultNameSpage; 
  64.  
  65. /// <summary> 
  66. /// 獲取控制器類的全名 
  67. /// </summary> 
  68. /// <param name="controllerName">控制器名稱</param> 
  69. public string GetControllerFullName(string controllerName) 
  70. return string.Format("{0}.{1}Controller"
  71. string.IsNullOrEmpty(ControlerDefaultNameSpage) ? AssemblyName : ControlerDefaultNameSpage, 
  72. controllerName); 
  73.  
  74. /// <summary> 
  75. /// 獲取控制器實例對象,根據controllerName生成一個沒有請求上下文對象的空的控制器,在為此控制器制定ControllerContext對象,然后返回控制器實例 
  76. /// </summary> 
  77. /// <param name="requestContext"></param> 
  78. /// <param name="controllerName"></param> 
  79. public IController CreateController(RequestContext requestContext, string controllerName) 
  80. var controller = ControllerAssembly.CreateInstance(GetControllerFullName(controllerName)) as Controller; 
  81. if (controller == null
  82. return null
  83. if (controller.ControllerContext == null
  84. controller.ControllerContext = new ControllerContext(requestContext, controller); 
  85. else 
  86. controller.ControllerContext.RequestContext = requestContext; 
  87. return controller; 
  88.  
  89. /// <summary> 
  90. /// 返回請求的會話狀態的支持類型 
  91. /// </summary> 
  92. /// <param name="requestContext"></param> 
  93. /// <param name="controllerName"></param> 
  94. public SessionStateBehavior GetControllerSessionBehavior(RequestContext requestContext, string controllerName) 
  95. var controllerType = ControllerAssembly.GetType(GetControllerFullName(controllerName), truetrue); 
  96. var sessionStateAttr = 
  97. Attribute.GetCustomAttribute(controllerType, typeof (SessionStateAttribute), false) as 
  98. SessionStateAttribute; 
  99. return sessionStateAttr == null ? SessionStateBehavior.Default : sessionStateAttr.Behavior; 
  100.  
  101. /// <summary> 
  102. /// 釋放資源 
  103. /// </summary> 
  104. /// <param name="controller"></param> 
  105. public void ReleaseController(IController controller) 
  106. var idDisposable = controller as IDisposable; 
  107. if (idDisposable != null
  108. idDisposable.Dispose(); 

第二種方法

路由注冊方法代碼如下:缺點是,如果有多個注冊路由的規則,都必須記得添加namespaces屬性,否則會出現錯誤

 

 
  1. //系統默認路由 
  2. routes.MapRoute( 
  3. name: "Default"
  4. url: "{controller}/{action}/{id}"
  5. defaults: new {controller = "Login", action = "Index", id = UrlParameter.Optional}, 
  6. namespaces: new string[] {"BookSystem_Controllers"
  7. ); 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一本色道久久综合狠狠躁篇怎么玩| 亚洲一区亚洲二区亚洲三区| 亚洲成人久久电影| 高清欧美性猛交| 国产美女精品视频免费观看| 国产精品精品视频一区二区三区| 中文字幕亚洲自拍| 国产精品国产三级国产aⅴ浪潮| 国产精品a久久久久久| 欧美日韩精品中文字幕| 91中文在线视频| 96sao精品视频在线观看| 久久97久久97精品免视看| 国产乱肥老妇国产一区二| 国产精自产拍久久久久久| 91久久在线观看| 亚洲一区制服诱惑| 久久久噜噜噜久久中文字免| 亚洲精品国产美女| 亚洲自拍偷拍区| 日韩美女免费观看| 日韩国产精品一区| 一区二区三区精品99久久| 色午夜这里只有精品| 久久影院资源网| 欧美在线视频导航| 亚洲第一精品久久忘忧草社区| 国产精品video| 精品高清一区二区三区| 亚洲国产小视频在线观看| 亚洲成人国产精品| 精品国产91久久久| 在线一区二区日韩| 热99精品里视频精品| 不卡在线观看电视剧完整版| 日韩电影中文字幕在线| 欧美整片在线观看| 国产欧美日韩精品专区| 中日韩午夜理伦电影免费| 久久综合免费视频影院| 日韩国产中文字幕| 久久国产精品久久国产精品| 国产精品一区二区三区免费视频| 91在线色戒在线| 45www国产精品网站| 亚洲国产精品久久久| 91免费的视频在线播放| 国产成人精品视频在线| 日韩电视剧免费观看网站| 亚洲色图18p| 国语自产精品视频在免费| 成人免费视频a| 这里只有精品在线观看| 久久精品国产欧美激情| 亚洲欧美综合v| 欧美日韩aaaa| 国产精品女视频| 欧美大成色www永久网站婷| 亚洲性生活视频| 国产69精品久久久久99| 亚洲已满18点击进入在线看片| 久久理论片午夜琪琪电影网| 久久国产视频网站| 欧美专区中文字幕| 欧美在线视频播放| 午夜欧美不卡精品aaaaa| 国产成人涩涩涩视频在线观看| 亚州国产精品久久久| 国产成一区二区| 欧美华人在线视频| 久久精品国产久精国产思思| 日本久久精品视频| 亚洲欧美国产日韩中文字幕| 国产日韩在线播放| 欧美性xxxxxx| www国产精品com| 97色在线观看| 亚洲成人久久久| 国内精品久久久久影院 日本资源| 国产亚洲欧美日韩精品| 国产狼人综合免费视频| 亚洲人精选亚洲人成在线| 久久天天躁狠狠躁夜夜爽蜜月| 日韩av在线资源| 欧美日韩成人免费| 日韩欧美在线视频免费观看| 久久精品电影网站| 清纯唯美亚洲综合| 91成人精品网站| 国产精品嫩草视频| 亚洲欧美日韩高清| 国产大片精品免费永久看nba| 亚洲精品电影在线| 91色琪琪电影亚洲精品久久| 福利精品视频在线| 91久久综合亚洲鲁鲁五月天| 爱福利视频一区| 91人人爽人人爽人人精88v| 日韩成人在线免费观看| 日韩av理论片| 国产精品国产自产拍高清av水多| 欧美最顶级丰满的aⅴ艳星| 国产视频在线一区二区| 亚洲精品福利视频| 国产亚洲视频在线观看| 亚洲少妇激情视频| 亚洲专区中文字幕| 久久久精品在线观看| 久久亚洲一区二区三区四区五区高| 欧美国产日韩精品| 欧美性xxxxx极品娇小| 亚洲精品白浆高清久久久久久| 亚洲午夜精品久久久久久性色| 亚洲久久久久久久久久久| 中文字幕在线日韩| 国产婷婷97碰碰久久人人蜜臀| 国产美女精彩久久| 97视频网站入口| 亚洲精品免费一区二区三区| 国产欧美日韩中文| 91精品国产网站| 色多多国产成人永久免费网站| 日韩电影在线观看永久视频免费网站| 国产噜噜噜噜噜久久久久久久久| 午夜免费在线观看精品视频| 国产欧美精品va在线观看| 日韩电视剧在线观看免费网站| 这里只有精品丝袜| 日韩电影免费在线观看中文字幕| 国产精品色婷婷视频| 国产精品黄色影片导航在线观看| 亚洲女人天堂网| 欧美激情欧美狂野欧美精品| 亚洲午夜小视频| 国产精品久久久久久久久久新婚| 九九热这里只有精品免费看| 日韩免费在线播放| 日韩午夜在线视频| 日本亚洲欧美三级| 国产精品丝袜久久久久久不卡| 国产一区二区三区精品久久久| 欧美成人在线网站| 久久影院资源网| 国产精品人成电影在线观看| 九九热最新视频//这里只有精品| 91久久精品一区| 久久久免费电影| 欧美激情精品久久久久久蜜臀| 欧美国产精品人人做人人爱| 久久天天躁狠狠躁夜夜躁| 91精品国产99久久久久久| 精品中文视频在线| 美女性感视频久久久| 亚洲精品一区av在线播放| 青青草原成人在线视频| 欧美成人激情视频免费观看| 神马国产精品影院av| 亚洲自拍偷拍在线| 亚洲性生活视频| 国产91ⅴ在线精品免费观看| 国产精品丝袜视频| 午夜精品理论片| 亚洲成人精品在线| 欧美成人精品在线观看|