<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

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

        來源:懂視網 責編:小采 時間:2020-11-27 22:38:23
        文檔

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

        ASP.NET MVC中將控制器分離到類庫的實現:前言 在、ASP.NET MVC的開發中,我們創建完項目之后,ASP.NET MVC是已Model-Controller-View的形式存在的,在創建項目自動生成的內容上Model我們很容易分離成類庫,所以這里不予說明,那么這時候我們就像Controller是不是也能夠分離出去呢?答案是
        推薦度:
        導讀ASP.NET MVC中將控制器分離到類庫的實現:前言 在、ASP.NET MVC的開發中,我們創建完項目之后,ASP.NET MVC是已Model-Controller-View的形式存在的,在創建項目自動生成的內容上Model我們很容易分離成類庫,所以這里不予說明,那么這時候我們就像Controller是不是也能夠分離出去呢?答案是

        前言

          在、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 ?? (_controllerAssembly = Assembly.Load(AssemblyName)); //加載控制器信息
         }
         }
        
         /// <summary>
         /// 構造函數實例化
         /// </summary>
         /// <param name="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) ? AssemblyName : ControlerDefaultNameSpage,
         controllerName);
         }
        
         /// <summary>
         /// 獲取控制器實例對象,根據controllerName生成一個沒有請求上下文對象的空的控制器,在為此控制器制定ControllerContext對象,然后返回控制器實例
         /// </summary>
         /// <param name="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 ? SessionStateBehavior.Default : sessionStateAttr.Behavior;
         }
        
         /// <summary>
         /// 釋放資源
         /// </summary>
         /// <param name="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"}
        );
        
        

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

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

        ASP.NET MVC中將控制器分離到類庫的實現:前言 在、ASP.NET MVC的開發中,我們創建完項目之后,ASP.NET MVC是已Model-Controller-View的形式存在的,在創建項目自動生成的內容上Model我們很容易分離成類庫,所以這里不予說明,那么這時候我們就像Controller是不是也能夠分離出去呢?答案是
        推薦度:
        標簽: 分離 mvc ASP.NET
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 国产大片91精品免费看3| 伊人久久免费视频| 国产伦精品一区二区三区免费迷 | 最新亚洲成av人免费看| 日本视频免费观看| 亚洲性日韩精品国产一区二区| 亚洲人成色77777在线观看| 免费观看的毛片手机视频| 亚洲国产综合自在线另类| 嫖丰满老熟妇AAAA片免费看| 亚洲a级成人片在线观看| 我想看一级毛片免费的| 亚洲精品一卡2卡3卡四卡乱码| 久久精品无码一区二区三区免费| 国产午夜亚洲精品国产| 免费A级毛片无码久久版| 国产免费一区二区三区免费视频| 亚洲人JIZZ日本人| 免费无码又爽又刺激高潮视频| 亚洲欧洲精品久久| 最近中文字幕无吗免费高清| 视频一区二区三区免费观看| 久久久久亚洲精品无码网址| 性xxxxx大片免费视频| 亚洲一区二区三区亚瑟| 国产一区二区三区在线观看免费| 色老头综合免费视频| 亚洲综合自拍成人| 午夜视频在线在免费| 岛国岛国免费V片在线观看| 久久精品国产亚洲av麻豆小说 | 亚洲色欲色欲www在线丝| 久久成人免费大片| 亚洲中文字幕AV每天更新| yellow视频免费看| 久久久久亚洲av无码专区喷水| 中文字幕无码免费久久99| 一级特黄色毛片免费看| 亚洲黄色免费在线观看| 免费少妇a级毛片人成网| 久久精品中文字幕免费|