
ABP|ABP Vnext
文章平均质量分 78
ABP是一个开源应用程序框架,专注于基于ASP.NET Core的Web应用程序开发,但也支持开发其他类型的应用程序.
.NET跨平台
比较认真。编程就是算法和数据结构,算法和数据结构是编程的灵魂。
展开
-
四十个ABP Framework面试题
ABP Framework是一个用于构建现代企业级Web应用程序的开源框架。它集成了最新的技术和最佳实践,提供了一整套工具和组件,帮助开发人员构建高质量、可扩展和易于维护的应用程序。ABP模块是一个功能独立、可复用的代码块,包含所有必要的组件和配置,可以轻松地集成到ABP应用程序中。原创 2023-03-13 00:30:26 · 1883 阅读 · 0 评论 -
ABP vNext 切换数据库为 MySQL
基于启动模板创建的 ABP 项目,默认数据库是 SQLServer,如何切换到 MySQL 呢?下面我来总结一下。转载 2022-12-10 19:27:32 · 604 阅读 · 0 评论 -
基于 abp vNext 的快速开发模板
基于 abp vNext 的快速开发模板介绍Templates to use when creating an application for abp vNext.基于abp已经最小化集成了各种项目开发所需的组件,Redis、Swagger、Autofac、Serilog、数据迁移、JWT、多语言支持等,支持多数据库(MySql、SqlServer、Sqlite、MongoDB)自由切换,可以根据业务需求自行简单修改,真正的开箱即用,直接开干写业务。快速使用dotnet new -i AbpTem转载 2022-05-29 19:10:43 · 664 阅读 · 0 评论 -
实施领域驱动设计(Implementing Domain Driven Design翻译)
使用 ABP 框架实现领域驱动设计的实用指南Apractical guide for implementing the Domain Driven Designwith the ABP Framework引言介绍这是实现领域驱动的实用指南设计(DDD)。虽然实现细节依赖于ABP 框架基础设施,但是核心概念、原则和模式适用于任何类型的解决方案,即使它不是.NET 解决方案。目标本书的目标是:●介绍和解释DDD 架构、概念、原则、模式和构建块。●解释ABP框架提供的框架结构和解决方案结构●引入转载 2022-02-03 17:00:17 · 1370 阅读 · 1 评论 -
ABP AsyncHelper.RunSync 内部实现
using System;using System.Reflection;using System.Threading.Tasks;using Nito.AsyncEx;namespace Abp.Threading{ /// <summary> /// Provides some helper methods to work with async methods. /// </summary> public static class As转载 2021-11-04 23:02:55 · 743 阅读 · 0 评论 -
Abp Vnext 中的UpdateAsync
今天来说一下abp vnext 中UpdateAsync 不能修改(锁的问题),查看执行sql 发现 where 后面不仅有Id= 还有 and ConcurrencyStamp=,所以不能修改,要想修改就得先获取再修改,这有什么意义呢?其实这个就在于如下配置,获取就有意义了,获取对象后就给表的行加了锁(进程内),其他人就无法修改,ConcurrencyStamp每次修改完都会变动,所以,页面上如果获取的不是最新的就无法修改Check.NotNull(builder, nameof(builder));转载 2021-11-04 00:49:43 · 1200 阅读 · 0 评论 -
[Abp vNext 源码分析] - 14. EntityFramework Core 的集成
一、简要介绍在以前的文章里面,我们介绍了 ABP vNext 在 DDD 模块定义了仓储的接口定义和基本实现。本章将会介绍,ABP vNext 是如何将 EntityFramework Core 框架跟仓储进行深度集成。ABP vNext 在集成 EF Core 的时候,不只是简单地实现了仓储模式,除开仓储以外,还提供了一系列的基础设施,如领域事件的发布,数据过滤器的实现。二、源码分析EntityFrameworkCore 相关的模块基本就下面几个,除了第一个是核心 EntityFrameworkC转载 2021-10-24 02:01:11 · 870 阅读 · 0 评论 -
[Abp vNext 源码分析] - 13. 本地事件总线与分布式事件总线 (Rabbit MQ)
一、简要介绍ABP vNext 封装了两种事件总线结构,第一种是 ABP vNext 自己实现的本地事件总线,这种事件总线无法跨项目发布和订阅。第二种则是分布式事件总线,ABP vNext 自己封装了一个抽象层进行定义,并使用 RabbitMQ编写了一个基本实现。在使用方式上,两种事件总线的作用基本相同。事件总线分布在两个模块,在 Volo.Abp.EventBus 模块内部,定义了事件总线的抽象接口,以及本地事件总线 (ILocalEventBus) 的实现。分布式事件总线的具体实现,是在 Volo转载 2021-10-24 01:50:53 · 1777 阅读 · 0 评论 -
[Abp vNext 源码分析] - 7. 权限与验证
一、简要说明在上篇文章里面,我们在 ApplicationService 当中看到了权限检测代码,通过注入 IAuthorizationService 就可以实现权限检测。不过跳转到源码才发现,这个接口是 ASP.NET Core 原生提供的 “基于策略” 的权限验证接口,这就说明 ABP vNext 基于原生的授权验证框架进行了自定义扩展。让我们来看一下 Volo.Abp.Ddd.Application 项目的依赖结构(权限相关)。本篇文章下面的内容基本就会围绕上述框架模块展开,本篇文章通篇较长,转载 2021-10-24 01:38:38 · 1829 阅读 · 0 评论 -
[Abp vNext 源码分析] - 12. 后台作业与后台工作者
一、简要说明ABP vNext 提供了后台工作者和后台作业的支持,基本实现与原来的 ABP 框架类似,并且 ABP vNext 还提供了对 HangFire 和 RabbitMQ 的后台作业集成。开发人员在使用这些第三方库的时候,基本就是开箱即用,不需要做其他复杂的配置。后台作业在系统开发的过程当中,是比较常用的功能。因为总是有一些长耗时的任务,而这些任务我们不是立即响应的,例如 Excel 文档导入、批量发送短信通知等。后台工作者 的话,ABP vNext 的实现就是在 CLR 的 Timer 之上转载 2021-10-23 01:24:41 · 1172 阅读 · 0 评论 -
[Abp vNext 源码分析] - 9. 接口参数的验证
一、简要说明ABP vNext 针对接口参数的校验工作,分别由过滤器和拦截器两步完成。过滤器内部使用的 ASP.NET Core MVC 所提供的 IModelStateValidator 进行处理,而拦截器使用的是 ABP vNext 自己提供的一套 IObjectValidator 进行校验工作。关于参数验证相关的代码,分布在以下三个项目当中:Volo.Abp.AspNetCore.MvcVolo.Abp.ValidationVolo.Abp.FluentValidation通过 MVC转载 2021-10-22 01:14:41 · 758 阅读 · 0 评论 -
[Abp vNext 源码分析] - 8. 审计日志
一、简要说明ABP vNext 当中的审计模块早在 依赖注入与拦截器一文中有所提及,但没有详细的对其进行分析。审计模块是 ABP vNext 框架的一个基本组件,它能够提供一些实用日志记录。不过这里的日志不是说系统日志,而是说接口每次调用之后的执行情况(执行时间、传入参数、异常信息、请求 IP)。除了常规的日志功能以外,关于 实体 和 聚合 的审计字段接口也是存放在审计模块当中的。(创建人、创建时间、修改人、修改时间、删除人、删除时间)二、源码分析2.1. 审计日志拦截器2.1.1 审计日志拦截转载 2021-10-22 00:28:57 · 1020 阅读 · 0 评论 -
[Abp vNext 源码分析] - 6. DDD 的应用层支持(应用服务)
一、简要介绍ABP vNext 针对于应用服务层,为我们单独设计了一个模块进行实现,即 Volo.Abp.Ddd.Application 模块。PS:最近博主也是在恶补 DDD 相关的知识,这里推荐大家看一下 ThoughtWorks 的 DDD 相关文章。关于 DDD 相关的著作,我这儿还是推荐经典的那三本《领域驱动设计:软件核心复杂性应对之道》、《实现领域驱动设计》、《领域驱动设计精粹》。DDD的学习整体来说是比较枯燥的,而且偏理论化的知识。所以需要结合大量实例来看,反复对照书中的概念加深理解转载 2021-10-21 01:06:52 · 483 阅读 · 0 评论 -
[Abp vNext 源码分析] - 5. DDD 的领域层支持(仓储、实体、值对象)
一、简要介绍ABP vNext 框架本身就是围绕着 DDD 理念进行设计的,所以在 DDD 里面我们能够见到的实体、仓储、值对象、领域服务,ABP vNext 框架都为我们进行了实现,这些基础设施都存放在 Volo.Abp.Ddd.Domain 项目当中。本篇文章将会侧重于理论讲解,但也只是一个抛砖引玉的作用,关于 DDD 相关的知识可以阅读 Eric Evans 所编写的 《领域驱动设计:软件核心复杂性应对之道》。PS:该书也是目前我正在阅读的 DDD 理论书籍,因为基于 DDD理论,我们能够精转载 2021-10-20 01:27:04 · 1191 阅读 · 0 评论 -
[Abp vNext 源码分析] - 4. 工作单元
一、简要说明统一工作单元是一个比较重要的基础设施组件,它负责管理整个业务流程当中涉及到的数据库事务,一旦某个环节出现异常自动进行回滚处理。在 ABP vNext 框架当中,工作单元被独立出来作为一个单独的模块(Volo.Abp.Uow)。你可以根据自己的需要,来决定是否使用统一工作单元。二、源码分析整个 Volo.Abp.Uow 项目的结构如下,从下图还是可以看到我们的老朋友 IUnitOfWorkManager 和 IUnitOfWork ,不过也多了一些新东西。看一个模块的功能,首先从它的 Mo转载 2021-10-20 00:16:00 · 698 阅读 · 0 评论 -
[Abp vNext 源码分析] - 3. 依赖注入与拦截器
一、简要说明ABP vNext 框架在使用依赖注入服务的时候,是直接使用的微软提供的 Microsoft.Extensions.DependencyInjection 包。这里与原来的 ABP 框架就不一样了,原来的 ABP 框架还需要抽象出来一个 IIocManager 用来管理整个 IoC 容器,现在则直接操作 IServiceCollection 与 IServiceProvider 进行组件的注册/解析。这里需要注意的是,虽然现在的依赖注入服务是使用微软官方那一套库进行操作,但是 ABP vNe转载 2021-10-19 23:59:58 · 1094 阅读 · 0 评论 -
[Abp vNext 源码分析] - 2. 模块系统的变化
一、简要说明本篇文章主要分析 Abp vNext 当中的模块系统,从类型构造层面上来看,Abp vNext 当中不再只是单纯的通过 AbpModuleManager 来管理其他的模块,它现在则是 IModuleManager 和 IModuleLoader 来协同工作,其他的代码逻辑并无太大变化。Abp vNext 规定每个模块必须继承自 IAbpModule 接口,这样 vNext 系统在启动的时候才会扫描到相应的模块。与原来 Abp 框架一样,每个模块可以通过 DependsOnAttribute转载 2021-10-15 00:47:37 · 464 阅读 · 0 评论 -
第一个 ABP vNext 程序(基于启动模板)
ABP vNext 是 ASP.NET Boilerplate 的下一代 Web 应用框架(详见博客Introducing the ABP vNext),它具有完整的架构和强大的基础设施用于快速开发现代化的 Web 应用。遵循最佳实践与惯例可以为你提供一个一致的(SOLID )开发体验。新建一个 ABP 应用有两种方式:基于启动模板,或者从空项目开始。本文总结创建基于启动模板的解决方案,并说明每个项目的作用。话不多说,我们马上开始创建第一个 ABP vNext 应用吧。安装 ABP CLI 命令do转载 2021-10-13 20:29:19 · 1054 阅读 · 0 评论 -
ABP vNext 切换数据库为 MySQL
基于启动模板创建的 ABP 项目,默认数据库是 SQLServer,如何切换到 MySQL 呢?下面我来总结一下。替换包 Volo.Abp.EntityFrameworkCore.SqlServer将 .EntityFrameworkCore 引用的 Volo.Abp.EntityFrameworkCore.SqlServer 替换成 Volo.Abp.EntityFrameworkCore.MySQL替换模块依赖 (Module Dependency)编辑.EntityFrameworkCore项转载 2021-10-13 20:14:09 · 521 阅读 · 0 评论 -
[Abp vNext 源码分析] - 1. 框架启动流程分析
一、简要说明本篇文章主要剖析与讲解 Abp vNext 在 Web API 项目下的启动流程,让大家了解整个 Abp vNext 框架是如何运作的。总的来说 ,Abp vNext 比起 ABP 框架更加精简。因为在 vNext 版本当中,原来归属于 Abp 库的许多内置的基本组件 (组织单元、拦截器等) 被拆分成了单独的模块,这样我们来看它整个启动流程就更加地直观清晰。二、源码分析要分析其源码,我这里是从他官方的 Demo 模板入手的,你可以在 https://abp.io 上构建你自己的模板项目。工转载 2021-10-11 00:23:21 · 760 阅读 · 0 评论 -
ABP VNEXT 项目搭建
生成主体项目命令abp new <项目名称>生成项目后可参考 阿星Plus 的博客项目进行优化精简优化后的项目结构Madas.HttpApi.Hosting 对外的 API 层Madas.EntityFrameworkCore.DbMigrations 用于自动生成数据库Madas.Application 应用层Madas.Application.Contracts 应用接口层Madas.BackgroundJobs 用于后台定时项目Madas.Domain 领转载 2021-10-10 22:53:45 · 577 阅读 · 0 评论 -
.NET Core之ABP vNext 开发实战(三) 熟悉项目构造
※ 官网介绍:(一)Domain.Shared项目包含常量,枚举和其他对象,这些对象实际上是领域层的一部分,但是解决方案中所有层/项目中都会使用到。该项目不依赖解决方案中的其他项目,其他项目直接或间接依赖该项目。(二)Domain解决方案的领域层. 它主要包含 实体, 集合根, 领域服务, 值类型, 仓储接口 和解决方案的其他领域对象。它依赖 .Domain.Shared 项目, 因为项目中会用到它的一些常量,枚举和定义其他对象.(三)Application.Contracts项目主要包含转载 2021-10-09 21:53:24 · 862 阅读 · 0 评论 -
本篇文章主要分析 Abp vNext 当中的模块系统
一、简要说明本篇文章主要分析 Abp vNext 当中的模块系统,从类型构造层面上来看,Abp vNext 当中不再只是单纯的通过 AbpModuleManager 来管理其他的模块,它现在则是 IModuleManager 和 IModuleLoader 来协同工作,其他的代码逻辑并无太大变化。Abp vNext 规定每个模块必须继承自 IAbpModule 接口,这样 vNext 系统在启动的时候才会扫描到相应的模块。与原来 Abp 框架一样,每个模块可以通过 DependsOnAttribute转载 2021-10-09 16:07:16 · 594 阅读 · 0 评论 -
ABP VNext实践之搭建可用于生产的IdentityServer4
一、前言用了半年多的abp vnext,在开发的效果还是非常的好,可以说节省了很多时间,像事件总线、模块化开发、动态API进行远程调用、自动API控制器等等,一整套的规范,让开发人员更方便的集成,提升效率;大家如果想多了解abp vnext 更多的资料或者源码,可以到github上看,文章结尾也会给出源码地址和wiki地址,优秀的你们要更优秀才行。今天给大家讲讲如何在利用abp vnext框架搭建IDS4且可以在生产环境下使用的,其中也需要针对于IDS4在linux系统使用nginx代理中端点不是htt转载 2021-10-09 13:50:14 · 1497 阅读 · 0 评论 -
Abp vNext 关于引用swagger注释补充
网上看了一些Abp vNext引用swagger的教程,大致流程都差不多,就是生成每一层对应的xml然后使用IncludeXmlComments方法来引用,后面亲自实践发现有些差异和要点,在此记录一下。基本步骤:右击项目解决方案,属性-生成-输出-勾选XML文档文件,删除路径信息仅保留xml文件名称。例如xxx.Application.xml。hostmodule下,AddSwaggerGen内添加以下代码:context.Services.AddSwaggerGen(options=>转载 2021-10-06 21:06:25 · 928 阅读 · 0 评论 -
在Abp中使用依赖注入
依赖注入是一种设计模式,这里主要讨论如何在 Abp 中使用依赖注入。注册依赖项在 Abp 中我们有很多种方法来注册依赖项,大多数情况下通过约定来注册依赖项就足够了。这也是 ASP.NET 中约定大于配置的一种体现。通过约定注册依赖项Abp 通过约定注册所有的 Repositories, Domain Services, Application Services, MVC Controllers 和 Web API Controllers,例如:public interface IPersonApp转载 2021-10-03 20:49:45 · 964 阅读 · 0 评论 -
ABP官方文档(三十二)【集成Swagger UI】
5.4 ABP分布式服务 - 集成SwaggerUI5.4.1 简介从官网得知,开启Swagger,你可以获得一个交互式的文档,生成和发现客户端SDK。5.4.2 ASP.NET Core1. 安装你可以很容易的集成Swagger到基于ASP.NET Core的 ABP项目。2. 安装Nuget包安装 Swashbuckle nuget包到你的Web项目。3. 配置在 Startup.cs 文件中找转载 2017-11-03 14:09:41 · 3234 阅读 · 1 评论 -
ABP官方文档(三十一)【集成OData】
5.3 ABP分布式服务 - 集成OData5.3.1 简介开放数据协议(Open Data Protocol,缩写OData)是一种描述如何创建和访问Restful服务。你可以在Abp中使用OData,只需要通过Nuget来安装Abp.Web.Api.OData.5.3.2 安装1. 使用Nuget安装首先应该使用Nuget安装Abp.Web.Api.OData到我们的WebApi项目:Insta转载 2017-11-03 14:01:36 · 1359 阅读 · 1 评论 -
ABP官方文档(三十)【动态WebApi层】
5.2 ABP表现层 - 动态WebApi层5.2.1 建立动态WebApi控制器 这是一篇关于ASP.NET Web API的文档。如果你对ASP.NET感兴趣,请阅读ASP.NET Core文档。Abp框架能够通过应用层自动生成web api: public interface ITaskAppService : IApplicationService { G转载 2017-11-03 13:59:36 · 7481 阅读 · 4 评论 -
ABP官方文档(二十九)【Web API Controllers】
5.1 ABP分布式服务 ASP.NET Web API Controllers5.1.1 简介ABP已经把 ASP.NET Web API Controllers 集成到了 Abp.Web.Api,你只要通过Nuget安装它。正如你一直那样做得,你可以创建常规的ASP.NET Web API Controllers, 依赖注入可以解析常规的ApiControllers。为了能够享受使用ABP.W转载 2017-11-03 13:49:43 · 3093 阅读 · 1 评论 -
ABP官方文档(二十八)【审计日志】
4.5 ABP应用层—审计日志维基百科定义:审计跟踪(也称为审核日志)是一个安全相关的时间顺序记录,记录这些记录的目的是为已经影响在任何时候的详细操作,提供程序运行的证明文件记录、源或事件。ABP提供了能够为应用程序交互自动记录日志的基础设施,它能记录你调用的方法的调用者信息和参数信息。从根本上来说,存储区域包含:tenant id(相关的租户Id),user id(请求用户Id),serve转载 2017-11-03 13:47:43 · 1984 阅读 · 1 评论 -
ABP官方文档(五十一)【集成EntityFramework Core】
ABP 基础设施层 - 集成 Entity Framework Core9.3.1 简介Abp.EntityFrameworkCore nuget package 被用来集成到EF Core ORM框架. 在安装这个包以后,我们应该在模块类 AbpEntityFrameworkCoreModule 上添加 DependsOn 特性。9.3.2 DbContextEF Core要求有个派生自DbCon转载 2017-11-06 10:08:34 · 3089 阅读 · 0 评论 -
ABP官方文档(三十三)【MVC Controllers】
6.1 ABP表现层 - Mvc Controllers6.1.1 简介ABP已经把 ASP.NET MVC Controllers 集成到了 Abp.Web.Mvc 中,正如你一直那样做的,你可以使用常规的MVC Controllers。 依赖注入可以解析常规的MVC Controllers。但是你的Controllers应该从 AbpController 派生,因为在该基类中ABP已经提供了一转载 2017-11-03 14:12:02 · 3232 阅读 · 1 评论 -
ABP官方文档(二十六)【权限认证】
4.4 ABP应用层 - 权限认证几乎所有的企业级应用程序都会有不同级别的权限验证。权限验证是用于检查用户是否允许某些指定操作。Abp有基础设施让你来实现权限验证。 注意:关于IPermissionChecker接口 Abp权限系统使用IPermissionChecker去检查授权。同时你可以根据需要实现你自己的方式,在module-zero项目中已经完整实现了。如果IPermissi转载 2017-11-03 10:21:10 · 5909 阅读 · 1 评论 -
ABP官方文档(三十四)【MVC视图,本地化】
6.2 ABP表现层 - Mvc视图6.2.1 简介在 Abp.Web.Mvc 中,ABP集成了MVC视图。你可以像往常一样创建常规的MVC视图。6.2.2 AbpWebViewPage 基类ABP定义了一个AbpWebViewPage基类,在该类中定义了一些有用的属性和方法。如果你使用startup templates来创建项目,那么你的视图会自动的继承该基类。AbpWebViewPage 定义了转载 2017-11-03 14:17:05 · 3059 阅读 · 1 评论 -
ABP官方文档(三十五)【导航栏】
6.4 ABP表现层 - 导航栏每一个WEB应用程序都有导航菜单,Abp也为用户提供了通用的创建和显示菜单方式。6.4.1 创建菜单一个应用程序可能包含不同的模块,而每个模块都可能有它自己的菜单项。在Abp中,需要创建一个派生自NavigationProvider的类来定义一个菜单项。假设我们有一个这样的主菜单:TasksReportsAdministration1 User Manageme转载 2017-11-05 23:06:58 · 2218 阅读 · 1 评论 -
ABP官方文档(三十六)【异常处理】
6.5 ABP表现层 - 异常处理6.5.1 简介 该文档只是针对ASP.NET MVC 以及Web API。如果你对ASP.NET Core也感兴趣,请参考ASP.NET Core文档。在 web 应用程序中,异常通常是在 MVC Controller actions 和 Web API Controller actions 中被处理的。当异常发生时,应用程序用户被以某种方式告知该错误和该错转载 2017-11-05 23:08:24 · 2815 阅读 · 1 评论 -
ABP官方文档(三十七)【Javascript API】
6.6 ABP表现层 - AJAX API6.6.2.1 AJAX操作问题现代的应用经常会使用AJAX,尤其是单页应用,几乎是和服务器通信的唯一手段,执行AJAX通常会有以下步骤:基本上:为了执行一个AJAX调用,首先你要在客户端提供一个可供请求的URL,选取提交数据和一个方法(GET,POST,PUT,DELETE)。等待调用完成后,处理返回结果。当执行AJAX调用服务器端的时候,可能会有错误转载 2017-11-05 23:18:27 · 945 阅读 · 1 评论 -
ABP官方文档(三十八)【AJAX API】
6.6 ABP表现层 - AJAX API6.6.2.1 AJAX操作问题现代的应用经常会使用AJAX,尤其是单页应用,几乎是和服务器通信的唯一手段,执行AJAX通常会有以下步骤:基本上:为了执行一个AJAX调用,首先你要在客户端提供一个可供请求的URL,选取提交数据和一个方法(GET,POST,PUT,DELETE)。等待调用完成后,处理返回结果。当执行AJAX调用服务器端的时候,可能会有错误转载 2017-11-05 23:25:56 · 2622 阅读 · 1 评论 -
ABP官方文档(二十七)【功能管理】
4.5 ABP应用层 - 功能管理4.5.1 简介大多数的SaaS(多租户) 应用拥有多个版本并且这些版本的功能各不相同。因此,他们能为客户提供不同的价格和功能选项。我们可以很容易的用ABP来实现这个功能管理系统。我们能定义一些功能,检查功能是否为租户开启。这个就像ABP的设计思想(例如权限和菜单设计)。 关于 IFeatureValueStore 我们可以利用 IFeatureVa转载 2017-11-03 13:35:43 · 3237 阅读 · 1 评论