ABP源碼分析三十四:ABP.Web.Mvc


ABP.Web.Mvc模塊主要完成兩個任務:

第一,通過自定義的AbpController抽象基類封裝ABP核心模塊中的功能,以便利的方式提供給我們創建controller使用。

第二,一些常見的基礎功能的實現。

 

AbpController:這是一個抽象基類,繼承自MVC Controller,是ABP系統中所有controller的基類。如下圖中,其封裝了ABP核心模塊中提供的大多數的功能。同時實現了一些公共的方法。它有三個派生類:AbpAppViewController,AbpScriptsController,AbpLocalizationController。

 

AbpWebViewPage<TModel> ,AbpWebViewPage:繼承自MVC的WebViewPage。他們是ABP系統中所有view的基類。實現了一些通用邏輯:比如本地化。

 

ControllerConventionalRegistrar:繼承自IConventionalDependencyRegister,register 所有controller的派生類。

 

AbpWebMvcModule:繼承自AbpModule,完成Abp.Web.MVC模塊的初始化。初始化主要干兩件事:

第一件事,Register Assembly by convention,這是所有模塊都要在初始化執行的動作。

第二件事,使用自定義的的WindsorControllerFactory替換MVC默認的DefaultControllerFactory,以實現Controller的依賴注入。

 

WindsorControllerFactory: 繼承自DefaultControllerFactory,重寫了ReleaseController和GetControllerInstance方法來管理Controller對象。

 

ErrorViewModel:封裝了ErrorInfo和Exception類型的屬性。

 

MvcAjaxResponse<TResult>,MvcAjaxResponse:用於封裝針對ajax requests的Response信息。繼承自AjaxResponse<TResult>,添加了一個TargetUrl屬性,沒有重寫基類中的方法。

 

AbpMvcAuthorizeAttribute:實現IAbpAuthorizeAttribute接口,繼承Mvc的AuthorizeAttribute,並重寫AuthorizeCore方法。 提供permissions的設置。

 

 

 

 

AbpLocalizationController:繼承自AbpController,添加了ChangeCulture方法用於更改語言設置。並將語言設置保存在Cookie中。

AbpAppViewController:繼承自AbpController,根據viewUrl返回一個view.

AbpScriptsController:繼承自AbpController,添加了GetScripts方法返回一段javascript代碼,該代碼中的相應的JS對象包含當前訪問用戶的所有Permission信息,Navigation信息,session信息,setting信息,當前MultiTenancy的配置信息,當前訪問用戶的Tenant的所有Feature信息。

 

ActionDescriptorHelper:返回ActionDescriptor的methodInfo

AbpJsonResult:繼承自Newtonsoft的JsonResult。配置將CLR對象序列化為CamelCase的json 對象。

 

EmbeddedResourceRouteHandler : 實現了MVC的IRouteHandler的GetHttpHandler方法。 返回自定義的IHttpHandler對象EmbeddedResourceHttpHandler

EmbeddedResourceHttpHandler:實現了MVC的IHttpHandler的ProcessRequest方法。根據RouteData中pathInfo指定的文件路徑,返回對應的文件。

WebResourceHelper:為嵌入型的資源文件請求創建路由規則,和指定其RouteHandler為EmbeddedResourceRouteHandler。嵌入型的資源文件是指嵌入到assembly中的JS和Css資源.

 

HtmlHelperResourceExtensions: 擴展了HtmlHelper類,添加了IncludeScript和IncludeStyle方法。這連個方法如下。有何用?主要用於防止客戶端讀取其緩存在本地的Js和Css文件,而這些文件在server端又存在更新的版本。

 

 

實際項目中的用法如下:

 

返回ABP源碼分析系列文章目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM