ABP原始碼分析三十四:ABP.Web.Mvc
ABP.Web.Mvc模組主要完成兩個任務:
第一,通過自定義的AbpController抽象基類封裝ABP核心模組中的功能,以便利的方式提供給我們建立controller使用。
第二,一些常見的基礎功能的實現。
AbpController:這是一個抽象基類,繼承自MVC Controller,是ABP系統中所有controller的基類。如下圖中,其封裝了ABP核心模組中提供的大多數的功能。同時實現了一些公共的方法。它有三個派生類:AbpAppViewController,AbpScriptsController,AbpLocalizationController。
AbpWebViewPage<TModel> ,AbpWebViewPage
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原始碼分析三十四:ABP.Web.Mvc
ABP.Web.Mvc模組主要完成兩個任務: 第一,通過自定義的AbpController抽象基類封裝ABP核心模組中的功能,以便利的方式提供給我們建立controller使用。 第二,一些常見的基礎功能的實現。 AbpController:這是一個抽象基類,繼承自MVC Controller,是A
ABP原始碼分析三十一:ABP.AutoMapper
這個模組封裝了Automapper,使其更易於使用。 下圖描述了改模組涉及的所有類之間的關係。 AutoMapAttribute,AutoMapFromAttribute和AutoMapToAttribute:這三個attribute用於標註一個類到另外一個類的map方向。 Auto
ABP原始碼分析三十六:ABP.Web.Api
這裡的內容和ABP 動態webapi沒有關係。除了動態webapi,ABP必然是支援使用傳統的webApi。ABP.Web.Api模組中實現了一些同意的基礎功能,以方便我們建立和使用asp.net webApi。 AbpApiController:這是一個抽象基類,繼承自ApiController,是AB
ABP原始碼分析三十五:ABP中動態WebAPI原理解析
動態WebAPI應該算是ABP中最Magic的功能之一了吧。開發人員無須定義繼承自ApiController的類,只須重用Application Service中的類就可以對外提供WebAPI的功能,這應該算是對DRY的最佳詮釋了. 如下圖所示,一行程式碼就為所有實現了IApplicationService的
ABP原始碼分析三十二:ABP.SignalR
Realtime Realtime是ABP底層模組提供的功能,用於管理線上使用者。它是使用SignalR實現給線上使用者傳送通知的功能的前提 IOnlineClient/OnlineClient: 封裝線上使用者的資訊 OnlineClientManager/IOnlineClientManager:
ABP原始碼分析三十九:ABP.Hangfire
ABP對HangFire的整合主要是通過實現IBackgroundJobManager介面的HangfireBackgroundJobManager類完成的。 HangfireBackgroundJobManager:實現了介面IBackgroundJobManager中的方法EnqueueAsync,通過
ABP原始碼分析三十七:ABP.Web.Api Script Proxy API
ABP提供Script Proxy WebApi為所有的Dynamic WebApi生成訪問這些WebApi的JQuery代理,AngularJs代理以及TypeScriptor代理。這些個代理就是javascript指令碼,通過這些代理可以簡單的訪問Dynamic webApi。 如下例項演示一個最基本的
ABP原始碼分析二十四:Notification
NotificationDefinition: 用於封裝Notification Definnition 的資訊。注意和Notification 的區別,如果把Notification看成是具體的訊息內容,NotificationDefinition則是對這個訊息自身的定義(可理解為訊息的型別)。
ABP原始碼分析二十九:ABP.MongoDb
這個Module通過建立一個MongoDbRepositoryBase<TEntity> 基類,封裝了對MongoDb資料庫的操作。 這個module通過引用MongoDB.Driver,MongoDB.Bson,MongoDB.Driver.Core,MongoDB.Driver.Legacy類
ABP原始碼分析二十七:ABP.Entity Framework
IRepository:介面定義了Repository常見的方法 AbpRepositoryBase:實現了IRepository介面的常見方法 EfRepositoryBase:實現了AbpRepositoryBase中定義的抽象方法:GetAll,Insert,Delete,Update。在實
ABP原始碼分析二十八:ABP.MemoryDB
這個模組簡單,且無實際作用。一般實際專案中都有用資料庫做持久化,用了資料庫就無法用這個MemoryDB 模組了。原因在於ABP限制了UnitOfWork的型別只能有一個(前文以作介紹),一般用了資料庫的必然要注入efUnitOfWork. 而注入了efUnitOfWork就不能在注入MemoryDbUnitO
ABP原始碼分析二十六:核心框架中的一些其他功能
本文是ABP核心專案原始碼分析的最後一篇,介紹一些前面遺漏的功能 AbpSession AbpSession: 目前這個和CLR的Session沒有什麼直接的聯絡。當然可以自定義的去實現IAbpSession使之與CLR的Session關聯 IAbpSession:定義如下圖中的四個屬性。 NullA
ABP原始碼分析二十五:EventBus
IEventData/EventData: 封裝了EventData資訊,觸發event的源物件和時間 IEventBus/EventBus: 定義和實現了了一系列註冊,登出和觸發事件處理函式的方法。EventBus定義了一個Dictionary容器來存放事件和處理該事件的物件(其實不是物件而是Factor
ABP原始碼分析三十八: ABP.Web.Api.OData
如果對OData不熟悉的話可參考OData的初步認識一文以獲取OData的一些初步知識。 API.Odata 模組唯一用處就是提供了一個泛型版本的ODataController,實現了Controller程式碼的常用。 AbpODataEntityController<TEntity, TPrima
ABP原始碼分析二十二:Navigation
MenuDefinition:封裝了導航欄上的主選單的屬性。 MenuItemDefinition:封裝了主選單的子選單的屬性。子選單可以引用其他子選單構成一個選單樹 UserMenu/UserMenuItem:封裝了用於顯示給使用者的選單/以及子選單集合。 ABP通過MenuDefinition/M
ABP原始碼分析二十一:Feature
Feature是什麼?Feature就是對function的分類方法,其與function的關係就比如Role和User的關係一樣。 ABP中Feature具有以下屬性: 其中最重要的屬性是name,用以表示feature的Identity,一個feature一個name. 一個Feature可以有一組子F
ABP原始碼分析三:ABP Module
Abp是一種基於模組化設計的思想構建的。開發人員可以將自定義的功能以模組(module)的形式整合到ABP中。具體的功能都可以設計成一個單獨的Module。Abp底層框架提供便捷的方法整合每個Module.下圖是所有Abp自帶的module.AbpModule是所有Module的基類,其已經擁有了IIocMa
ABP原始碼分析二十:ApplicationService
IApplicationService : 空介面,起標識作用。所有實現了IApplicationService 的類都會被自動注入到容器中。同時所有IApplicationService物件都會被注入一些攔截器(例如:auditing, UnitOfWork等)以實現AOP AbpServiceBase:
ABP原始碼分析三十三:ABP.Web
ABP.Web模組並不複雜,主要完成ABP系統的初始化和一些基礎功能的實現。 AbpWebApplication : 繼承自ASP.Net的HttpApplication類,主要完成下面三件事一,在Application_Start完成AbpBootstrapper的初始化。整個ABP系統的初始化就是通過A
OpenCV學習三十四:watershed 分水嶺演算法
1. watershed void watershed( InputArray image, InputOutputArray markers ); 第一個引數 image,必須是一個8bit 3通道彩色影象矩陣序列,第一個引數沒什麼要說的。 關鍵是第二個引數 mar