1. 程式人生 > >ABP原始碼分析三十三:ABP.Web

ABP原始碼分析三十三:ABP.Web

ABP.Web模組並不複雜,主要完成ABP系統的初始化和一些基礎功能的實現。

AbpWebApplication : 繼承自ASP.Net的HttpApplication類,主要完成下面三件事
一,在Application_Start完成AbpBootstrapper的初始化。整個ABP系統的初始化就是通過AbpBootstrapper完成初始化的。
二,在Application_BeginRequest設定根據request或cookie中的Culture資訊,完成當前工作執行緒的CurrentCulture和CurrentUICulture的設定。
三,在Application_AuthenticateRequest設定TenantId到claimsIdentity的Claim中。

AbpWebModuleConfiguration/IAbpWebModuleConfiguration: 定義了一個SendAllExceptionsToClients配置項

AbpWebModule: 繼承自AbpModule,完成Abp.Web模組的初始化。初始化主要幹兩件事:

第一,Register Assembly by convention,這是所有模組都要在初始化完成的動作。

第二,將資原始檔中的本地化資料新增到底層框架中的LocalizationManager維護的一個ILocalizationSource物件的字典中。

WebAssemblyFinder : 實現了IAssemblyFinder的GetAllAssemblies方法,用於獲取當前web專案所引用的非原生的assembly。

WebAuditInfoProvider: 實現了底層框架中的IAuditInfoProvider介面。主要提供BrowserInfo,ClientIpAddress和ClientName。這三個資訊來自HttpContext。

IFeaturesScriptManager/FeaturesScriptManager:用於返回一段javascript程式碼,該程式碼中的abp.features包含了當前訪問使用者的Tenant的所有Feature資訊。

IAuthorizationScriptManager/AuthorizationScriptManager :用於返回一段javascript程式碼,該程式碼中的abp.auth包含了當前訪問使用者的所有Permission資訊。

IMultiTenancyScriptManager/MultiTenancyScriptManager : 用於返回一段javascript程式碼,該程式碼中的abp.multiTenancy包含了當前MultiTenancy的配置資訊。

INavigationScriptManager/NavigationScriptManager : 用於返回一段javascript程式碼,該程式碼中的abp.nav包含了當前訪問使用者的所有Navigation資訊。

ISessionScriptManager/SessionScriptManager : 用於返回一段javascript程式碼,該程式碼中的abp.session包含了當前訪問使用者的所有session資訊(userId,tenantId,impersonatorUserId,impersonatorTenantId,multiTenancySide)。

ISettingScriptManager/SettingScriptManager : 用於返回一段javascript程式碼,該程式碼中的abp.setting包含了當前訪問使用者的所有setting資訊

ErrorInfo:用於封裝error的資訊

ValidationErrorInfo:用於封裝Validation Error的資訊

IExceptionToErrorInfoConverter/DefaultErrorInfoConverter : 該介面和其預設的實現用於將CLR的exception轉換為ABP中的ErrorInfo。

IErrorInfoBuilder/ErrorInfoBuilder : 該介面和其實現通過呼叫IExceptionToErrorInfoConverter物件將將CLR的exception轉換為ABP中的ErrorInfo。

AjaxResponse /AjaxResponse<object>: 用於封裝針對ajax requests的Response資訊。

相關推薦

ABP原始碼分析十三ABP.Web

ABP.Web模組並不複雜,主要完成ABP系統的初始化和一些基礎功能的實現。 AbpWebApplication : 繼承自ASP.Net的HttpApplication類,主要完成下面三件事一,在Application_Start完成AbpBootstrapper的初始化。整個ABP系統的初始化就是通過A

ABP原始碼分析十三ZERO的本地化

ABP Zero模組擴充套件了ABP基礎框架中的本地化功能,實現了通過資料庫管理本地化的功能。其通過資料庫儲存本地化語言及其資源。 ApplicationLanguage:代表本地化語言的實體類。一種語言就是一個ApplicationLanguage例項。 ApplicationLanguag

ABP原始碼分析十八: ABP.Web.Api.OData

如果對OData不熟悉的話可參考OData的初步認識一文以獲取OData的一些初步知識。 API.Odata 模組唯一用處就是提供了一個泛型版本的ODataController,實現了Controller程式碼的常用。 AbpODataEntityController<TEntity, TPrima

ABP原始碼分析十三Authorization

Permission:用於定義一個Permission,一個permission可以包含多個子Permission. PermissionDictionary:繼承自Dictionary<string, Permission>類,很明顯是一個用於儲存permission物件的字典。 I

ABP原始碼分析十四ABP.Web.Mvc

ABP.Web.Mvc模組主要完成兩個任務: 第一,通過自定義的AbpController抽象基類封裝ABP核心模組中的功能,以便利的方式提供給我們建立controller使用。 第二,一些常見的基礎功能的實現。 AbpController:這是一個抽象基類,繼承自MVC Controller,是A

ABP原始碼分析十六ABP.Web.Api

這裡的內容和ABP 動態webapi沒有關係。除了動態webapi,ABP必然是支援使用傳統的webApi。ABP.Web.Api模組中實現了一些同意的基礎功能,以方便我們建立和使用asp.net webApi。 AbpApiController:這是一個抽象基類,繼承自ApiController,是AB

ABP原始碼分析十七ABP.Web.Api Script Proxy API

ABP提供Script Proxy WebApi為所有的Dynamic WebApi生成訪問這些WebApi的JQuery代理,AngularJs代理以及TypeScriptor代理。這些個代理就是javascript指令碼,通過這些代理可以簡單的訪問Dynamic webApi。 如下例項演示一個最基本的

ABP原始碼分析ABP Module

Abp是一種基於模組化設計的思想構建的。開發人員可以將自定義的功能以模組(module)的形式整合到ABP中。具體的功能都可以設計成一個單獨的Module。Abp底層框架提供便捷的方法整合每個Module.下圖是所有Abp自帶的module.AbpModule是所有Module的基類,其已經擁有了IIocMa

ABP原始碼分析十一ABP.AutoMapper

這個模組封裝了Automapper,使其更易於使用。 下圖描述了改模組涉及的所有類之間的關係。 AutoMapAttribute,AutoMapFromAttribute和AutoMapToAttribute:這三個attribute用於標註一個類到另外一個類的map方向。 Auto

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原始碼分析十四Entity的設計

IEntity<TPrimaryKey>: 封裝了PrimaryKey:Id,這是一個泛型型別 IEntity: 封裝了PrimaryKey:Id,這是一個int型別 Entity<TPrimaryKey> :支援主鍵是泛型型別的Entity Entity:支援主鍵是int型別的

ABP原始碼分析二十ApplicationService

IApplicationService : 空介面,起標識作用。所有實現了IApplicationService 的類都會被自動注入到容器中。同時所有IApplicationService物件都會被注入一些攔截器(例如:auditing, UnitOfWork等)以實現AOP AbpServiceBase:

ABP原始碼分析十六DTO的設計

IDTO:空介面,用於標註Dto物件。 ComboboxItemDto:用於combobox/list中Item的DTO NameValueDto<T>/NameValueDto:用於name value鍵值對的DTO, name為string型別, value為泛型或string型別。

ABP原始碼分析十七DTO 自動校驗的實現

對傳給Application service物件中的方法的DTO引數,ABP都會在方法真正執行前自動完成validation(根據標註到DTO物件中的validate規則)。 ABP是如何做到的? 思路無外乎通過Castle的攔截器實現AOP。本文主要分析ABP是如何設計。 Ivalidate: 空介面,用

ABP原始碼分析四十ZERO的Application和Tenant

ABP的Zero模組以資料庫為資料來源實現了ABP框架中的tenant management (multi-tenancy), role management, user management, session, authorization (permission management), setting m

ABP原始碼分析十二本地化

本文逐個分析ABP中涉及到locaization的介面和類,以及相互之間的關係。本地化主要涉及兩個方面:一個是語言(Language)的管理,這部分相對簡單。另一個是語言對應得本地化資源(Localization)的管理,這部分稍顯複雜。 LanguageInfo:用於封裝language的基本

ABP原始碼分析十九Auditing

審計跟蹤(也叫審計日誌)是與安全相關的按照時間順序的記錄,它們提供了活動序列的文件證據,這些活動序列可以在任何時間影響一個特定的操作。 AuditInfo:定義如下圖中需要被Audit的資訊。 AuditedAttribute: 用於標識一個方法或一個類的所有方法都需要啟用Auditing功能

ABP原始碼分析十一Timing

Timing這個簡單實用的功能主要用於以統一的方式表示時間。因為ABP中有大量的module,還支援自定義module,所以將時間統一表示為local時間(預設)或utc時間是必要的。 IClockProvider:提供獲取當前時間和標準化時間的介面。 UtcClockProvider:實現了以UTC