18 ABP Framework 模塊管理

ABP Framework 模塊管理

概述

該頁面詳細介紹了在 ABP Framework 解決方案中使用 ABP CLI 及相關工具添加、更新和管理模塊的方法。模塊管理是 ABP 模塊化架構的核心,支持可重用業務和基礎設施功能的集成。模塊通常以 NuGet 和/或 NPM 包的形式分發,有時也以源代碼形式提供。

ABP CLI 模塊管理命令

命令描述
abp add-module向解決方案添加多包模塊
abp update更新模塊和 ABP 包版本
abp list-modules列出可用的官方 ABP 模塊

模塊添加流程

模塊添加由 SolutionModuleAdder 類和 abp add-module 命令協調完成,流程如下:

Yes
No
Yes
No
abp add-module (AddModuleCommand.ExecuteAsync)
SolutionModuleAdder.GetModuleInfoAsync
SolutionModuleAdder.RemoveIncompatiblePackages
ProjectFinder.GetProjectFiles
SolutionModuleAdder.AddNugetAndNpmReferences
withSourceCode?
SolutionModuleAdder.DownloadSourceCodesToSolutionFolder
SolutionModuleAdder.AddAngularPackages
SolutionModuleAdder.RemoveUnnecessaryProjectsAsync
addSourceCodeToSolutionFile?
SolutionFileModifier.AddModuleToSolutionFileAsync
NugetPackageToLocalReferenceConverter.Convert
SolutionModuleAdder.AddAngularSourceCode
SolutionModuleAdder.RunBundleForBlazorAsync
SolutionModuleAdder.ModifyDocContent
Module added

abp add-module 命令

  • 語法abp add-module <module-name> [options]

  • 關鍵選項

    • --new:創建專用于解決方案的新模塊
    • --with-source-code:下載模塊源代碼到解決方案
    • --add-to-solution-file:將下載的模塊添加到解決方案文件
    • -s, --solution:明確指定解決方案文件
    • --skip-db-migrations:跳過數據庫遷移創建
    • -v, --version:指定模塊版本(默認為項目的 ABP 版本)
  • 示例

    abp add-module Volo.Blogging                       # 向當前解決方案添加 Blogging 模塊
    abp add-module Volo.Blogging -s Acme.BookStore     # 向指定解決方案添加模塊
    abp add-module ProductManagement --new             # 創建名為 ProductManagement 的新模塊
    

模塊結構與目標項目解析

添加模塊時,ABP 基于 NuGetPackageTarget 和項目命名約定確定解決方案中哪些項目應接收每個包:

NugetPackageInfo.Target=Application
*.Application.csproj
NugetPackageInfo.Target=ApplicationContracts
*.Application.Contracts.csproj
NugetPackageInfo.Target=Domain
*.Domain.csproj
NugetPackageInfo.Target=DomainShared
*.Domain.Shared.csproj
NugetPackageInfo.Target=HttpApi
*.HttpApi.csproj
NugetPackageInfo.Target=HttpApiClient
*.HttpApi.Client.csproj
NugetPackageInfo.Target=EntityFrameworkCore
*.EntityFrameworkCore.csproj
NugetPackageInfo.Target=MongoDB
*.MongoDB.csproj
NugetPackageInfo.Target=Blazor
*.Blazor.csproj
NugetPackageInfo.Target=Web
*.Web.csproj

目標解析邏輯

ProjectFinder.FindNuGetTargetProjectFile 方法用于解析哪個項目接收每個包:

Yes
No
NugetPackageInfo.Target
ProjectFinder.FindNuGetTargetProjectFile
Project file exists?
Add package reference
Skip package

例如,目標為 EntityFrameworkCore 的包會映射到以 .EntityFrameworkCore.csproj 結尾的項目。

添加帶源代碼的模塊

使用 --with-source-code--new 選項時,模塊源代碼會下載到 /modules 文件夾并設置項目引用:

Yes
No
abp add-module --with-source-code
SolutionModuleAdder.DownloadSourceCodesToSolutionFolder
SolutionModuleAdder.RemoveUnnecessaryProjectsAsync
NugetPackageToLocalReferenceConverter.Convert
addSourceCodeToSolutionFile?
SolutionFileModifier.AddModuleToSolutionFileAsync
End

此方法推薦用于:

  • 自定義或擴展模塊代碼
  • 調試模塊內部
  • 審查模塊實現

數據庫集成

如果添加的模塊包含實體,ABP 會:

  • 定位應用程序的 DbContext
  • DbContext 添加模塊的配置方法
  • 創建新的 EF Core 遷移(除非跳過)
  • 運行遷移程序項目(如果可用)
No
Yes
Yes
No
Module added
module.EfCoreConfigureMethodName exists?
End
DerivedClassFinder.Find(dbMigrationsProject, 'AbpDbContext')
DbContextFileBuilderConfigureAdder.Add
skipDbMigrations?
EfCoreMigrationManager.AddMigration
SolutionModuleAdder.RunMigrator

創建數據庫遷移

模塊添加器將:

  1. 在應用程序中找到 DbContext
  2. 使用模塊的 Configure{ModuleName} 方法添加必要的實體配置
  3. 創建名為 Added_{ModuleName}_Module 的新遷移
  4. 運行遷移程序(如果可用)

客戶端集成

模塊可能包含用于 Angular、Blazor 或 MVC 的客戶端包,模塊添加器會自動集成它們:

Found
Not found
Found
Not found
Detect Angular NPM packages
ProjectNpmPackageAdder.AddNpmPackageAsync
Skip
SolutionModuleAdder.TryConfigureModuleConfigurationsForAngular
Detect Blazor NuGet packages
ProjectNugetPackageAdder.AddAsync
Skip
SolutionModuleAdder.RunBundleForBlazorAsync

Angular 集成

包括:

  • 安裝 NPM 包(ProjectNpmPackageAdder.AddNpmPackageAsync
  • 修改 app.module.tsapp-routing.module.ts 以注冊模塊(SolutionModuleAdder.TryConfigureModuleConfigurationsForAngular
  • 按需添加源代碼

Blazor 集成

包括:

  • 將 NuGet 包添加到 Blazor 項目
  • 運行捆綁命令生成靜態資源(SolutionModuleAdder.RunBundleForBlazorAsync

更新模塊

要更新解決方案中所有與 ABP 相關的 NuGet 和 NPM 包,請使用:

abp update

更新流程

abp update (UpdateCommand.ExecuteAsync)
Find .sln files
For each solution
VoloNugetPackagesVersionUpdater.UpdateSolutionAsync
NpmPackagesUpdater.Update
Done

選項

選項描述
--npm僅更新 NPM 包
--nuget僅更新 NuGet 包
--check-all單獨檢查每個包版本
-v, --version更新到特定版本

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/93018.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/93018.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/93018.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

外觀模式C++

外觀模式&#xff08;Facade Pattern&#xff09;是一種結構型設計模式&#xff0c;它為復雜系統提供一個簡化的接口&#xff0c;隱藏系統內部的復雜性&#xff0c;使客戶端能夠更輕松地使用系統。這種模式通過創建一個外觀類&#xff0c;封裝系統內部的交互邏輯&#xff0c;客…

Go 微服務限流與熔斷最佳實踐:滑動窗口、令牌桶與自適應閾值

&#x1f31f; Hello&#xff0c;我是蔣星熠Jaxonic&#xff01; &#x1f308; 在浩瀚無垠的技術宇宙中&#xff0c;我是一名執著的星際旅人&#xff0c;用代碼繪制探索的軌跡。 &#x1f680; 每一個算法都是我點燃的推進器&#xff0c;每一行代碼都是我航行的星圖。 &#x…

Java面試寶典:JVM性能優化

一、運行時優化 Java虛擬機(JVM)的運行時優化是提升Java應用性能的核心環節。JIT(Just-In-Time)編譯器在程序運行過程中,通過分析熱點代碼的執行模式,動態地進行一系列高級優化。這些優化技術對開發者透明,但了解其原理能幫助我們編寫出更易于優化的代碼,從而顯著提升…

Day55--圖論--107. 尋找存在的路徑(卡碼網)

Day55–圖論–107. 尋找存在的路徑&#xff08;卡碼網&#xff09; 今天學習并查集。先過一遍并查集理論基礎。再做下面這一道模板題&#xff0c;就可以結束了。體量不多&#xff0c;但是理解并查集&#xff0c;并使用好&#xff0c;不容易。 后續再找相關的題目來做&#xff0…

C++中的鏈式操作原理與應用(三):專注于異步操作延的C++開源庫 continuable

目錄 1.簡介 2.安裝與集成 3.快速入門 4.完整示例 5.優勢與適用場景 1.簡介 continuable 是一個專注于 異步操作延續&#xff08;continuation&#xff09; 的現代 C 開源庫&#xff0c;旨在簡化異步編程流程&#xff0c;解決 “回調地獄” 問題&#xff0c;提供直觀、靈活…

STM32--寄存器與標準庫函數--通用定時器--輸出比較(PWM生成)

目錄 前言 通用定時器類型 向上計數、向下計數、中心對齊 輸入捕獲與輸出比較概念 輸出比較典型例子&#xff1a;驅動舵機旋轉 通用定時器的輸出比較庫函數 代碼 通用定時器的輸出比較寄存器操作 代碼 這里提供數據手冊的寄存器 后言 前言 使用平臺:STM32F407ZET6 使…

91、23種設計模式

設計模式是軟件設計中反復出現的解決方案的模板&#xff0c;用于解決特定問題并提高代碼的可維護性、可擴展性和可復用性。23種經典設計模式可分為創建型、結構型和行為型三大類&#xff0c;以下是具體分類及模式概述&#xff1a; 一、創建型模式&#xff08;5種&#xff09; 關…

力扣(串聯所有單詞的子串)

串聯所有單詞的子串問題&#xff1a;多滑動窗口與哈希表的實戰應用。 一、題目分析&#xff08;一&#xff09;問題定義 給定字符串 s 和字符串數組 words&#xff08;words 中所有單詞長度相同 &#xff09;&#xff0c;找出 s 中所有“串聯子串”的起始索引。串聯子串指包含 …

RH134 管理基本存儲知識點

1. 對 Linux 磁盤進行分區時有哪兩種方案&#xff1f;分別加以詳細說明。答&#xff1a;MBR分區&#xff1a;主引導記錄(MBR)分區方案是運行BIOS固件的系統上的標準方案。此方案支持最 多四個主分區。在Linux系統上&#xff0c;您可以使用擴展分區和邏輯分區來創建最多…

【JS 異步】告別回調地獄:Async/Await 和 Promise 的優雅實踐與錯誤處理

【JS 異步】告別回調地獄&#xff1a;Async/Await 和 Promise 的優雅實踐與錯誤處理 所屬專欄&#xff1a; 《前端小技巧集合&#xff1a;讓你的代碼更優雅高效 上一篇&#xff1a; 【JS 數組】數組操作的“瑞士軍刀”&#xff1a;精通 Array.reduce() 的騷操作 作者&#xff…

23.Linux : ftp服務及配置詳解

Linux &#xff1a; ftp服務及配置詳解 FTP 基本概念 定義&#xff1a;文件傳輸協議&#xff08;File Transfer Protocol&#xff09;&#xff0c;采用 C/S 模式工作。端口&#xff1a; 控制端口&#xff1a;21數據端口&#xff1a;20FTP 工作原理模式工作流程連接發起方主動模…

悲觀鎖樂觀鎖與事務注解在項目實戰中的應用場景及詳細解析

在今天做的項目練習部分中真的學到了很多東西&#xff0c;也補充了許多之前遺漏或是忘記的知識點&#xff0c;但時間精力有限&#xff0c;我就先記錄一下今天用到的一個新東西&#xff0c;悲觀鎖和樂觀鎖。首先給出實際應用背景&#xff1a;在加入鎖和事務注解之前&#xff0c;…

Java構造器與工廠模式(靜態工程方法)詳解

1. 構造器1.1 構造器的核心意義1.1.1 對象初始化構造器在創建對象 (new) 時自動調用, 用于初始化對象的狀態 (如設置字段初始值, 分配資源等)無構造器時: 字段為默認值&#xff08;0/null/false&#xff09;有構造器&#xff1a;確保對象創建后即處于有效狀態1.1.2 強制初始化…

解決jdk初始化運行,防火墻通信選錯專業網絡問題

問題描述新項目添加不同版本的jdk&#xff0c;運行時提示防火墻通信策略&#xff0c;選成專用網絡。其他人訪問后端接口時&#xff0c;提示連接失敗。 解決方案&#xff1a;1、在搜索欄中輸入 防火墻關鍵字&#xff0c;選擇到防火墻和網絡保護2、選擇允許應用通過防火墻3、先點…

【Linux】常用命令(三)

【Linux】常用命令&#xff08;三&#xff09;1. export1.1 原理1.2 常用語法1.3 示例1.4 書中對命令的解釋1.5 生效范圍2. 測試服務地址與其端口能否訪問2.1 nc(Netcat)命令2.2 telnet2.3 nmap2.4 curl命令 (適用于HTTP/HTTPS 服務)1. export export 是 Linux Shell&#xff…

Pytest項目_day15(yaml)

YAMLYAML是一個對所有編程語言都很友好的數據序列化標準&#xff0c;它是一種直觀的能夠被電腦識別的數據序列化格式&#xff0c;是一種可讀性高且容易被人類閱讀的腳本語言YAML語言的本質是一種通用的數據串行化格式適用場景 可以直接序列化為數組、字典解析成本低專門寫配置文…

審批流程系統設計與實現:狀態驅動、靈活擴展的企業級解決方案

審批流程系統設計與實現&#xff1a;狀態驅動、靈活擴展的企業級解決方案 本文基于實際企業級審批系統源碼&#xff0c;深入解析如何設計高擴展性、強一致性的審批流程引擎&#xff0c;涵蓋狀態機設計、多租戶隔離、文件服務集成等核心實現。 1. 系統設計概覽 審批系統的核心架…

汽車免拆診斷案例 | 2010款奧迪A4L車行駛中發動機偶爾自動熄火

故障現象 一輛2010款奧迪A4L車&#xff0c;搭載CDZ發動機 &#xff0c;累計行駛里程約為18.2萬km。該車行駛中發動機偶爾自動熄火&#xff0c;有時熄火后能夠立即重新起動著機&#xff0c;有時需要等待一會兒才能重新起動著機&#xff0c;故障頻率較低。因該故障在其他維修廠陸…

Liam ERD:自動生成美觀的交互式實體關系圖

Liam ERD 是一個可以快速生成美觀且具有交互性的數據庫實體關系圖&#xff08;ERD&#xff09;的工具&#xff0c;可以幫助用戶實現復雜數據庫結構的可視化。 Liam ERD 是一個免費開源的項目&#xff0c;代碼托管在 GitHub&#xff1a; https://github.com/liam-hq/liam 功能…

網絡協議序列化工具Protobuf

目錄前言一、下載注意二、解壓安裝三、Protobuf的使用1、創建.proto文件2、利用protoc編譯.proto文件前言 Protocol Buffers是Google的?種語??關、平臺?關、可擴展的序列化結構數據的?法&#xff0c;它可?于&#xff08;數據&#xff09;通信協議、數據存儲等。 Protoco…