国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ASP.NET MVC中將控制器分離到類庫的實現(xiàn)

2024-07-10 12:47:51
字體:
供稿:網(wǎng)友

前言

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

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

第一種方法

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

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

// 源文件頭信息:// <copyright file="ControllersFactory.cs">// Copyright(c)2014-2034 Kencery.All rights reserved.// 創(chuàng)建人:韓迎龍(kencery)// 創(chuàng)建時間: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>  /// 重寫注冊控制器的方法,使之能夠?qū)⒖刂破鞴芊蛛x到其它類庫中實現(xiàn)  /// <auther>  ///   <name>kencery</name>  ///   <date>2015-6-18</date>  /// </auther>  /// </summary>  /// 說明:IControllerFactory接口含有三個需要實現(xiàn)的方法: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>    /// 獲取控制器的默認(rèn)命名空間    /// </summary>    public string ControlerDefaultNameSpage    {      get { return _controlerDefaultNameSpage; }    }    /// <summary>    /// 獲取控制器所在的程序集的Assembly實例    /// </summary>    public Assembly ControllerAssembly    {      get      {        return _controllerAssembly ?? (_controllerAssembly = Assembly.Load(AssemblyName)); //加載控制器信息      }    }    /// <summary>    /// 構(gòu)造函數(shù)實例化    /// </summary>    /// <param name="assemblyName"></param>    public ControllersFactory(string assemblyName)    {      _assemblyName = assemblyName;    }    /// <summary>    /// 構(gòu)造函數(shù)實例化    /// </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>    /// 獲取控制器實例對象,根據(jù)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>    /// 返回請求的會話狀態(tài)的支持類型    /// </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();      }    }  }}            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 金门县| 江永县| 思南县| 长治县| 类乌齐县| 高雄市| 杭锦旗| 永德县| 乌审旗| 巴东县| 侯马市| 广丰县| 攀枝花市| 吉隆县| 常宁市| 龙南县| 叙永县| 江北区| 当涂县| 蒲城县| 东平县| 卓尼县| 桂平市| 山西省| 慈利县| 鄂托克旗| 东莞市| 延川县| 马尔康县| 梁平县| 建始县| 潍坊市| 建瓯市| 呼和浩特市| 新营市| 白河县| 克东县| 阳山县| 梓潼县| 措美县| 刚察县|