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端又存在更新的版本。
實際項目中的用法如下: