中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

.NET/ASP.NET MVC(模塊化開發AraeRegistration)

發布時間:2020-08-10 23:43:25 來源:網絡 閱讀:2760 作者:王清培 欄目:編程語言

閱讀目錄:

  • 1.開篇介紹

  • 2.AreaRegistration注冊路由(傳遞路由上下文進行模塊化注冊)

1】開篇介紹

ASP.NET Routing 路由功能非常強大,設計的也很巧妙;如果說ASP.NETMVC是建立在ASP.NET之上還不如準確的說ASP.NETMVC是建立在Routing基礎之上的,才使得Controller順利被找到并且執行Action;

那么今天這篇文章是一個簡短的介紹如何在ASP.NETMVC下進行很好的模塊化開發,都知道ASP.NETMVC是分層架構中的UI層框架;而UI層的開發有著天生的難以控制性,尤其是WEBUI和WINFORMUI有著很大的區別;WEBUI的組成元素多,又是在遠程的瀏覽器中處理的,所以還是很考驗架構設計的;

那么ASP.NETMVC的AreaRegistration是用來干什么呢,它是用來提供一個很好的接口讓我們可以將Controller定義在其他的Library項目中,這主要可以用來解決模塊化開發;一般情況下我們很少將所有的東西都定義在WebApplication中,而是會根據業務需要或者架構需要劃分出一系列的Library項目來,從而讓我們的邏輯架構更清晰也讓物理架構的設計很靈活點,比如:橫向的擴展,動態設計業務模塊,WEBAPI等等;

但是Routing跟MVC沒有必然的關系,都是可以通過擴展的方式嵌入各自想要的功能點,Routing是在提供自定義IHttpModule的方式將控制權拿到,而MVC是建立在Routing的基礎上讓Uri的路由為自己所用,其實準確點講AreaRegistration適當的擴展可以用在很多的場合下,但是畢竟AreaRegistration是在ASP.NETMVC中提供出來的;

2】AreaRegistration注冊路由(傳遞路由上下文進行模塊化注冊)

簡單的解釋,AreaRegistration是用來在ASP.NETMVC里面注冊多個區域的方式;就是可以將一個大型的MVC站點劃分成多個Area區域,然后各自的Area有著自己的Controller、Action、View等元素;但是一般情況我們并不會那么做,因為將站點的所有UI層中的元素切開放會給維護工作帶來很大的工作量,而且我們約定俗成的是UI層的東西放在一個主的WebApplication中,然后是業務功能的劃分,但是大型站點也許需要這么做;

2.1】AreaRegistration對象結構(典型的模板方法模式)

下面我們來分析一下AreaRegistration的對象結構,至少我們要搞清楚如何使用這個對象及相關的對象;

using System;
using System.Web.Routing;
namespace System.Web.Mvc
{
    public abstract class AreaRegistration
    {
        protected AreaRegistration();       
        public abstract string AreaName { get; }
        public static void RegisterAllAreas();
        public static void RegisterAllAreas(object state);
        public abstract void RegisterArea(AreaRegistrationContext context);
    }
}

這是AreaRegistration對象的代碼結構,兩個靜態的重載方法是用來在Gloab.asax文件中啟動全局注冊用的,而帶object state 參數的是用來傳遞到我們將要繼承的對象中去的;然后剩下的一個AreaName屬性、RegisterArea方法是需要我們去實現的;

其實熟悉設計模式的朋友都會對這種模式很熟悉,因為它是最典型的模板方法模式,也是設計原則中的依賴倒置原則,在內部MVC只依賴AreaRegistration對象,然后將通過RegisterArea方法將AreaRegistrationContext上下文傳遞到子類中去執行點東西;

這里需要強調的是,一個AreaRegistration對應一個獨立的AreaRegistrationContext對象,相關的參數是在構造函數中傳入的,前提是你必須實現AreaName屬性;

2.2】實現AreaRegistration對象

我們來實現一個OrderAreaRegistration對象,讓其繼承AreaRegistration抽象類;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Mvc;
namespace Api.Order
{
    public class OrderAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get { return "Aip/Order"; }
        }
        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(name: "api.order.default", url: "api/order/{controller}/{action}/{orderid}",
                defaults: new { controller = "OrderController", action = "GetOrderOperationDatetime", orderid = "1001" },
                namespaces: new string[] { "Api.Order" });
        }
    }
}

定義在api項目中的Controller:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Mvc;
namespace Api.Order
{
    public class Order : Controller
    {
        public string GetOrderOperationDatetime(string orderId)
        {
            if (orderId.Equals("1001"))
                return DateTime.Now.ToString();
            else
                return orderId;
        }
    }
}

然后我們得引用這個Library項目,這樣它才能在啟動的時候去自動的掃描到我們這個類型;

圖1:

.NET/ASP.NET MVC(模塊化開發AraeRegistration)

AreaRegistrationContext是使用AreaRegistraton的實現類的參數AreaName作為參數的一部分來構造特定的Context對象的;AreaRegistratioContext是表示一個區域的上下文,我們在Context里面注冊的動東西都是屬于當前Area的,它包括自己的Route集合;

圖2:

.NET/ASP.NET MVC(模塊化開發AraeRegistration)

站點順利的路由到了我們在api.order項目中定義的OrderController;

圖3:

.NET/ASP.NET MVC(模塊化開發AraeRegistration)

這么來設計項目也是會多一中選擇的;

作者:王清培

出處:http://wangqingpei557.blog.51cto.com/

本文版權歸作者和51CTO共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。



向AI問一下細節

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

AI

阿合奇县| 潢川县| 时尚| 治多县| 无棣县| 纳雍县| 乌审旗| 封开县| 剑川县| 麻栗坡县| 佳木斯市| 泰州市| 汾阳市| 宜宾县| 祁东县| 临猗县| 白水县| 饶河县| 广安市| 宁武县| 泸溪县| 喀什市| 四子王旗| 册亨县| 景东| 塔城市| 军事| 遵化市| 龙泉市| 洛宁县| 乐陵市| 会东县| 易门县| 东至县| 海伦市| 林西县| 宣汉县| 达拉特旗| 临洮县| 驻马店市| 兖州市|