国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答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中將控制器分離到類庫的實現(xiàn)

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

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

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

前言

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

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

第一種方法

  代碼如下:當寫完代碼之后再路由中注冊。提示:實現(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>
 /// 獲取控制器的默認命名空間
 /// </summary>
 public string ControlerDefaultNameSpage
 {
 get { return _controlerDefaultNameSpage; }
 }

 /// <summary>
 /// 獲取控制器所在的程序集的Assembly實例
 /// </summary>
 public Assembly ControllerAssembly
 {
 get
 {
 return _controllerAssembly ?? (_controllerAssembly = Assembly.Load(AssemblyName)); //加載控制器信息
 }
 }

 /// <summary>
 /// 構造函數(shù)實例化
 /// </summary>
 /// <param name="assemblyName"></param>
 public ControllersFactory(string assemblyName)
 {
 _assemblyName = assemblyName;
 }

 /// <summary>
 /// 構造函數(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();
 }
 }
 }
}

第二種方法

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

//系統(tǒng)默認路由
 routes.MapRoute(
 name: "Default",
 url: "{controller}/{action}/{id}",
 defaults: new {controller = "Login", action = "Index", id = UrlParameter.Optional},
 namespaces: new string[] {"BookSystem_Controllers"}
);

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

文檔

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

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

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 免费在线一级毛片 | 国产精品免费网站 | 草逼电影 | 一区二区三区高清不卡 | 香蕉视频网页版 | 亚洲视频五区 | 欧美精品久久久久久久久大尺度 | 免费在线一级毛片 | 亚洲国产成人久久一区www妖精 | 亚洲一区日韩 | 欧美日韩精品一区二区视频在线观看 | 亚洲一区中文字幕 | 欧美高清视频一区 | 国产成人成人一区二区 | 91精品成人免费国产 | 国产精品国产精品国产专区不卡 | 国产成人精品日本亚洲专区6 | 国产不卡在线观看 | 91精品一区二区三区在线 | 国产精品视频一区麻豆 | 高清精品一区二区三区一区 | a欧美在线 | 久久久久久久国产高清 | 精品伊人| 大陆一级毛片 | 一级毛片免费毛片毛片 | 亚洲国产成人精品91久久久 | 国产青草| 国产精品视频免费看 | 欧美综合自拍亚洲综合百度 | 乌克兰性欧美精品高清bd | 久久久久免费精品国产小说 | 亚洲 欧美 日韩 小说 另类 | 99久久精品免费国产一区二区三区 | 在线免费观看亚洲视频 | 精品日韩在线 | 国产精品免费_区二区三区观看 | 国产青草| 久久久久久久久久久9精品视频 | 国产第一页在线视频 | 国产在线一区二区三区四区 |