ABP VNext学习日记22

2023-11-29 20:38
文章标签 学习 22 日记 abp vnext

本文主要是介绍ABP VNext学习日记22,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.PreConfigureServices和PostConfigureServices
解析:AbpModule类还定义了PreConfigureServices和PostConfigureServices方法用来在ConfigureServices之前或之后覆盖和编写代码。在这些方法中编写的代码将在所有其它模块的ConfigureServices方法之前/之后执行。

2.OnApplicationInitialization方法
解析:可以在启动应用程序时覆盖OnApplicationInitialization方法来执行代码:

public class BlogModule : AbpModule
{//...public override void OnApplicationInitialization(ApplicationInitializationContext context){var myService = context.ServiceProvider.GetService<MyService>();myService.DoSomething();}
}

OnApplicationInitialization通常由启动模块用于构建ASP.NET Core应用程序的中间件管道:

[DependsOn(typeof(AbpAspNetCoreMvcModule))]
public class AppModule : AbpModule
{//...public override void OnApplicationInitialization(ApplicationInitializationContext context){var app = context.GetApplicationBuilder();var env = context.GetEnvironment();if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseMvcWithDefaultRoute();}
}

3.应用程序初始化前和后
解析:AbpModule类还定义了OnPreApplicationInitialization和OnPostApplicationInitialization方法,用来在OnApplicationInitialization之前或之后覆盖和编写代码。在这些方法中编写的代码将在所有其它模块的OnApplicationInitialization方法之前/之后执行。

4.应用程序关闭
解析:如果要在应用程序关闭时执行某些代码,可以覆盖OnApplicationShutdown方法。

5.框架模块和应用程序模块
解析:
[1]框架模块:这些是框架的核心模块,比如缓存、邮件、主题、安全、序列化、验证、EFCore集成、MongoDB集成等。它们没有应用/业务功能,它们提供了日常开发经常用到的通用基础设施,集成和抽象。
[2]应用程序模块:这些模块实现了特定的应用/业务功能,比如博客、文档管理、身份管理、租户管理等。它们通常有自己的实体、服务、API和UI组件。

6.从文件夹加载插件
解析:IServiceCollection.AddApplication()扩展方法可以获取配置插件源的选项:

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Modularity.PlugIns;namespace MyPlugInDemo.Web
{public class Startup{public void ConfigureServices(IServiceCollection services){services.AddApplication<MyPlugInDemoWebModule>(options =>{options.PlugInSources.AddFolder(@"D:\Temp\MyPlugIns");});}public void Configure(IApplicationBuilder app){app.InitializeApplication();}}
}

7.插件源
解析:options.PlugInSources类是IPlugInSource接口的一系列实现,并且AddFolder方法仅仅是以下表达式的便捷方法:

options.PlugInSources.Add(new FolderPlugInSource(@"D:\Temp\MyPlugIns"));

[1]AddFolder()方法仅在给定目录下查找程序集文件,而不在子目录中查找。可以传递一个SearchOption.AllDirectories参数作为第二个参数,来递归地查找它的子目录。
[2]PlugInSources.AddFiles()方法获取程序集(通常是dll)文件列表,这是使用FilePlugInSource类的快捷方式。
[3]PlugInSources.AddTypes()方法获取模块类类型的列表,如果实用化此方法,那么需要自己加载模块的程序集,但是在需要时它提供了灵活性,这是使用TypePlugInSource类的快捷方式。

8.领域事件
解析:注意领域事件必须继承自DomainService类,否则无法触发事件。

9.批量更新数据库记录
解析:
[1]Z.EntityFramework.Plus
[2]EFCore.BulkExtensions:暂不支持MySql,仅支持Sqlite和MsSql

10.DomainService抽象类
解析:
在这里插入图片描述

11.商品领域内部结构
解析:
[1]实体[Entity]
[2]聚合[Aggregate]和聚合根[Aggregate Root]
[3]仓储[Repository]
[4]领域服务[Domain Service]
[5]领域事件[Domain Event]
[6]值对象[Value Object]
[7]规约[Specification]

12.领域服务例子
解析:
[1]ProductService.cs

/// <summary>
/// 支付领域服务
/// </summary>
public class ProductService
{public ProductImageService productImageService { set; get; }public void Update(Product product){product.Id = 2;// 1、更新商品主键productImageService.Update(new ProductImage());}
}

[2]ProductImageService.cs

/// <summary>
/// 商品图片服务
/// </summary>
public class ProductImageService
{public void Update(ProductImage productImage){ ... }
}

13.安装和更新Volo.Abp.Cli
解析:

dotnet tool install -g Volo.Abp.Cli
dotnet tool update -g Volo.Abp.Cli

14.--skip-cli-version-check选项
解析:跳过检查最新版本的ABP CLI,如果没有指定,它会检查最新版本。如果检查到ABP CLI的新版本,会显示一条警告消息。

15.ABP命令列表
解析:
[1]help:展示ABP CLI的用法帮助信息
[2]new:生成基于ABP的启动模板
[3]update:自动更新的ABP解决方案ABP相关的NuGet和NPM包
[4]add-package:添加ABP包到项目
[5]add-module:添加应用模块到解决方案
[6]generate-proxy:生成客户端代理以使用HTTP API端点
[7]remove-proxy:移除以前生成的客户端代理
[8]switch-to-preview:切换到ABP框架的最新预览版本
[9]switch-to-nightly:切换解决方案所有ABP相关包为夜间构建版本
[10]switch-to-stable:切换解决方案所有ABP相关包为最新的稳定版本
[11]translate:当源代码控制存储库中有多个JSON[本地化]
[12]login:使用你在abp.io的用户名和密码在你的计算机上认证
[13]logout:在你的计算机注销认证
[14]install-libs:为MVC/Razor Pages和Blazor Server UI类型安装NPM包

16.ABP解决方案的名称
解析:
[1]二级命名空间:常见的命名方式类似于YourCompany.YourProject
[2]三级命名空间:YourCompany.YourProduct.YourModule

17.Web模板项目创建
解析:
[1]默认MVC项目
abp new YDT.Project.Web -o YDT.Project.Web
[2]Mysql MVC项目
abp new YDT.Project.Web --dbms mysql -o YDT.Project.Web
[3]Mysql Web API项目
abp new YDT.Project.Web --dbms mysql -u none -o YDT.Project.Web.Api

18.Console模板项目创建
解析:

abp new YDT.Project.Console -t console -o YDT.Project.Console

19.Module模板项目创建
解析:
[1]Module+有用户界面
abp new YDT.Project.Module -t module -o YDT.Project.Module
[2]Module+无用户界面
abp new YDT.Project.Module.NoUi -t module --no-ui -o YDT.Project.Module.NoUi
[3]模块+mysql
abp new YDT.Project.Module.NoUi -t module --no-ui --dbms mysql -o YDT.Project.Module.NoUi

20.ABP层次依赖关系
解析:
在这里插入图片描述
[1]Domain.Shared所有项目直接或间接依赖此项目,此项目中的所有类型都可以被其它项目所引用。Domain仅依赖Domain.Shared项目,因为Domain.Shared本就属于领域层的一部分。例如,Domain.Shared项目中的枚举类型IssueType被Domain项目中的Issue实体所引用。
[2]Application.Contracts依赖Domain.Shared项目,可以在DTO中重用Domain.Shared中的类型。例如,Domain.Shared项目中的枚举类型IssueType同样被Contracts项目中的CreateIssueDtoDTO所引用。
[3]Application依赖Application.Contracts项目,因为此项目需要实现应用服务的接口及接口使用的DTO。另外也依赖Domain项目,因为应用服务的实现必须依赖领域层中的对象。
[4]EntityFrameworkCore依赖Domain项目,因为此项目需要将领域对象[实体或值对象]映射到数据库的表,另外还需要实现Domain项目中的仓储接口。
[5]HttpApi依赖Application.Contracts项目,因为Controllers需要注入应用服务。
[6]HttpApi.Client依赖Application.Contracts项目,因为此项目需要是使用应用服务。
[7]Web依赖HttpApi项目,因为此项目对外提供HTTP APIs。另外Pages或Components需要使用应用服务,所以还间接依赖Application.Contracts项目。

21.ABP DDD内部调用原理
解析:
在这里插入图片描述

22.IDataSeedContributor接口
解析:种子系统。

23.ABP专题
解析:
[1]UnitOfWork实践
[2]多表关联
[3]多租户源码和实践
[4]IDS4和Identity源码
[5]实现ABP模块化
[6]ABP微服务

24.ABP增删改查接口
解析:
[1]基础设施层:EfCoreRepository<EBusinessDbContext, Product, Guid>
[2]领域层:IRepository<Product, Guid>
[3]应用层:ICrudAppService,CrudAppService<Product, ProductDto, Guid>

25.模块化拓扑
解析:
在这里插入图片描述

这篇关于ABP VNext学习日记22的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/434240

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件