亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ASP.NET MVC中實現將控制器分離到類庫的方法有哪些

發布時間:2020-12-09 16:29:39 來源:億速云 閱讀:218 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關ASP.NET 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 &#63;&#63; (_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) &#63; 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 &#63; 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"}
);

以上就是ASP.NET MVC中實現將控制器分離到類庫的方法有哪些,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

浙江省| 绍兴县| 灵台县| 微博| 平顺县| 永和县| 呼伦贝尔市| 泉州市| 泰兴市| 财经| 株洲市| 汪清县| 商洛市| 鄂州市| 河北区| 遂溪县| 出国| 阿拉善盟| 千阳县| 普宁市| 福泉市| 沙湾县| 保山市| 措勤县| 洱源县| 安图县| 浑源县| 特克斯县| 岚皋县| 内乡县| 静安区| 那曲县| 永春县| 荃湾区| 铜鼓县| 泽州县| 安化县| 繁峙县| 阳江市| 广河县| 保定市|