ABP
文章平均质量分 64
Johan.
关注前沿技术,并致力于开源社区与微软平台的组合优化;有多年大数据高并发实践经验、对精简代码并行程序开发、代码美感以及程序员能力修养等相关问题也有着浓厚的兴趣;
展开
-
ABP 插件项目软删除不生效解决方案
ABP .NET Core 2.1 升级到 .NET 5 后遇到一个奇怪的问题。插件项目 TenantId 与 IsDeleted 没生效。删除操作执行成功,界面上数据还在。一开始以为是删除失败了,结果一看方法体就四句话,还有两句是判断,实在是没有失败的理由。下面是这段没有报错的删除方法。/// <summary>删除分类</summary>public async Task Remove(Guid id){ var entity = await _repo..原创 2021-09-29 16:14:57 · 1038 阅读 · 0 评论 -
Abp Hangfire 占用 PostgreSql 连接数的另类解决方案
最开始占用数据库20+连接数,数据库的默认连接数是 100。说起来也还好。但实在有点看不下去。大部分服务的连接数只有几个,只有这个服务使用了 Hangfire,数据看起来就有点不好看。改成 Redis 后,PSQL 连接数降下去了。观察一段时间看看效果。...原创 2020-07-27 11:40:40 · 631 阅读 · 0 评论 -
深入浅出-应用服务
应用服务实现应用程序的用例, 将领域层逻辑公开给表示层.从表示层(可选)调用应用服务,DTO (数据传对象)作为参数. 返回(可选)DTO给表示层.示例图书实体假设你有一个Book实体(聚合根), 如下所示:public class Book : AggregateRoot<Guid>{ public const int MaxNameLength = 128; public virtual string Name { get; protected s.转载 2020-06-02 16:52:44 · 475 阅读 · 0 评论 -
深入浅出-可定制仓储设计
"在领域层和数据映射层之间进行中介,使用类似集合的接口来操作领域对象." (Martin Fowler)。实际上,仓储用于领域对象在数据库(参阅实体)中的操作,通常每个聚合根或不同的实体创建对应的仓储。通用(泛型)仓储ABP为每个聚合根或实体提供了默认的通用(泛型)仓储. 你可以在服务中注入IRepository<TEntity, TKey>使用标准的CRUD操作. 用法示例:public class PersonAppService : ApplicationSe...转载 2020-05-21 16:21:05 · 421 阅读 · 0 评论 -
ABP 如何查询出软删除(SoftDelete)数据
介绍ABP本身是一个包含许多nuget包的模块化框架。它还提供了一个完整的基础架构来开发你自己的具有实体、服务、数据库集成、 API、UI组件等等功能的应用程序模块。模块类每个模块都应该定义一个模块类.定义模块类的最简单方法是创建一个派生自AbpModule的类,如下所示:public class BlogModule : AbpModule{ }配置依赖注入和其他模块ConfigureServices方法ConfigureServices是将你原创 2020-05-11 16:42:00 · 999 阅读 · 1 评论 -
深入浅出- ABP 多租户
ABP的多租户模块提供了创建多租户应用程序的基本功能。维基百科中是这样定义多租户的:软件多租户技术指的是一种软件架构,这种架构可以使用软件的单实例运行并为多个租户提供服务。租户是通过软件实例的特定权限共享通用访问的一组用户。使用多租户架构,软件应用为每个租户提供实例的专用共享,包括实例的数据、配置、用户管理、租户的私有功能和非功能属性。多租户与多实例架构形成对比,将软件实例的行为根据不同...原创 2020-05-06 10:29:11 · 1144 阅读 · 1 评论 -
通过配置自动判断环境并使用对应的配置文件-ABP
什么是DDD?ABP框架提供了基础设施使基于DDD的开发更易实现。DDD在维基百科中的定义如下:领域驱动设计(DDD)是一种通过将实现连接到持续进化的模型来满足复杂需求的软件开发方法. 领域驱动设计的前提是:把项目的主要重点放在核心领域和领域逻辑上 把复杂的设计放在领域模型上 发起技术专家和领域专家之间的创造性协作,以迭代方式完善解决特定领域问题的概念模型分层ABP框...原创 2020-04-20 14:24:41 · 694 阅读 · 1 评论 -
深入浅出-对象到对象映射
将对象映射到另一个对象是常用并且繁琐重复的工作,大部分情况下两个类都具有相同或相似的属性. 例如下面的应用服务方法:public class UserAppService : ApplicationService{ private readonly IRepository<User, Guid> _userRepository; public UserApp...转载 2020-04-28 16:23:17 · 614 阅读 · 0 评论 -
领域驱动设计-实体与聚合根
实体是DDD(Domain Driven Design)中核心概念.Eric Evans是这样描述实体的 "一个没有从其属性,而是通过连续性和身份的线索来定义的对象"实体通常映射到关系型数据库的表中。实体类实体都继承自Entity<TKey>类,如下所示:public class Book : Entity<Guid>{ public strin...转载 2020-04-14 14:04:22 · 1628 阅读 · 0 评论 -
入门系列-设置管理
Settings配置系统是在启动时配置应用程序很好的方式. 除了配置之外, ABP提供了另外一种设置和获取应用程序设置的方式。设置存储在动态数据源(通常是数据库)中的键值对. 设置系统预构建了用户,租户,全局和默认设置方法并且可以进行扩展。定义设置使用设置之前需要定义它. ABP是模块化的, 不同的模块可以拥有不同的设置. 模块中派生SettingDefinitionProv...转载 2020-04-07 17:44:27 · 626 阅读 · 1 评论 -
入门系列-审计日志
ABP框架扩展了ASP.NET Core的分布式缓存系统.Volo.Abp.Caching Package默认情况下启动模板已经安装了这个包,所以大部分情况下你不需要手动安装.Volo.Abp.Caching是缓存系统的核心包.使用包管理控制台(PMC)安装到项目:Install-Package Volo.Abp.Caching然后将AbpCachingModule...转载 2020-04-01 09:37:17 · 4700 阅读 · 0 评论 -
入门系列-授权(ASP.NET Core 授权)介绍
授权用于在应用程序中判断是否允许用户执行某些特定的操作.ABP扩展了ASP.NET Core 授权, 将权限添加为自动策略并且使授权系统在应用服务同样可用.所以ASP.NET Core授权的功能特性和它的文档在基于ABP的应用程序是可用的. 本文中着重介绍在ASP.NET Core授权功能基础上添加的功能.Authorize AttributeASP.NET Core 定义...转载 2020-03-24 17:04:18 · 1148 阅读 · 0 评论 -
ABP中缓存的使用方法
ABP验证基础设施是可扩展的.Volo.Abp.FluentValidationNuGet 包扩展了验证系统使其与FluentValidation库一起工作.原创 2020-03-30 11:12:35 · 1581 阅读 · 0 评论 -
入门系列-参数验证集成
验证验证系统用于验证对于特定的控制器操作或服务的方法的用户输入或客户端请求.ABP与ASP.NET Core模型验证系统系统兼容,模型验证文档中的内容对于基于ABP应用程序同样有效.所以本文主要集中在ABP特征,而不是重复微软文档.ABP增加了以下优点:定义IValidationEnabled向任意类添加自动验证. 所有的应用服务都实现了该接口,所以它们会被自动验证. 自动将...原创 2020-03-17 16:50:09 · 994 阅读 · 1 评论 -
入门系列-异常处理
ABP提供了用于处理Web应用程序异常的标准模型.自动处理所有异常.如果是API/AJAX请求,会向客户端返回一个标准格式化后的错误消息. 自动隐藏内部详细错误并返回标准错误消息. 为异常消息的本地化提供一种可配置的方式. 自动为标准异常设置HTTP状态代码,并提供可配置选项,以映射自定义异常.自动处理异常当满足下面任意一个条件时,AbpExceptionFilt...转载 2020-03-10 09:22:58 · 2744 阅读 · 0 评论 -
.NET Core 控制台启动失败“以一种访问权限不允许的方式做了一个访问套接字的尝试”
1.System.IO.IOException:“Failed to bind to address http://localhost:8102.”2.SocketException: 以一种访问权限不允许的方式做了一个访问套接字的尝试。3.AggregateException: One or more errors occurred. (以一种访问权限不允许的方式做了一个访问套接字的尝试...原创 2020-03-06 14:38:23 · 7435 阅读 · 0 评论 -
入门系列-虚拟文件系统
虚拟文件系统使得管理物理上不存在于文件系统中(磁盘)的文件成为可能. 它主要用于将(js, css, image, cshtml ...)文件嵌入到程序集中, 并在运行时将它们象物理文件一样使用。Volo.Abp.VirtualFileSystem nuget包Volo.Abp.VirtualFileSystem是虚拟文件系统的核心包. 使用程序包管理器控制台(PMC)将其安装到项目中:...转载 2020-02-27 09:53:02 · 1113 阅读 · 0 评论 -
入门系列-集成 Autofac
集成 AutofacAutofac 是.Net世界中最常用的依赖注入框架之一. 相比.Net Core标准的依赖注入库, 它提供了更多高级特性, 比如动态代理和属性注入.安装 Autofac所有的启动模板和示例都已经集成了 Autofac. 所以, 多数时候你无需手动安装这个包.安装Volo.Abp.Autofacnuget 包到你的项目 (对于一个多项目应用程序, 建议...转载 2020-02-18 11:47:01 · 935 阅读 · 0 评论 -
ABP 使用[DontWrapResult]注解去掉接口返回的“__abp”
在开发过程中可能会遇到接口需要返回自定义数据结构,ABP 在这方面也有考虑到。给方法加上注解即可,代码如下:[DontWrapResult]public async Task<object> GetCustomInfo(xXxInput input){ return new { a = 1, b = "2", c...原创 2020-02-12 19:18:25 · 21591 阅读 · 0 评论 -
入门系列-在控制台应用中使用ABP
本教程将介绍如何从头开始以最小的依赖关系启动ABP. 你通常希望以启动模板开头.创建一个新项目使用Visual Studio创建一个新的.Net Core Console应用程序:安装 Volo.Abp 包Volo.Abp.Core是创建基于ABP的应用程序的核心nuget包. 所以,将它安装到你的项目中:Install-Package Volo.Abp.Core...原创 2020-01-22 17:19:48 · 1227 阅读 · 0 评论 -
入门系列-在AspNet Core MVC Web Application中使用ABP
本教程将介绍如何开始以最少的依赖关系开始使用ABP开发.通常情况下你需要下载一个启动模板创建一个新项目使用Visual Studio创建一个空的AspNet Core Web Application: 选择空模板你可以选择其它模板,但是我想要从一个简洁的项目演示它。安装 Volo.Abp.AspNetCore.Mvc 包Volo.Abp.AspNetCore.Mvc是AB...原创 2020-01-30 09:37:22 · 1411 阅读 · 0 评论 -
入门系列-ASP.NET Core MVC 模板入门
创建新项目本教程使用ABP CLI创建一个新项目. 更多选项, 请参阅入门页面.如果你之前未安装,请使用命令行安装ABP CLI:dotnet tool install -g Volo.Abp.Cli在空文件夹中使用abp new命令来创建项目:abp new Acme.BookStore你可以使用不同级别的命名空间; 例如BookStore, Acme.Boo...原创 2020-01-15 09:52:08 · 6728 阅读 · 0 评论 -
ABP 接口返回 An internal error occurred during your request
在 ABP 开发过程中,这个错误是必然会遇到。该错误的中文版“对不起,在处理您的请求期间,产生了一个服务器内部错误”这是系统在发生没有处理的内部错误时抛出的默认错误信息,其目的是友好的向用户展示异常信息,避免看到一堆报错懵逼。开发人员发现这样的错误时,就去分析日志来定位并解决问题。日志文件一般在 Host/logs 目录下的 *.txt 文件里。时常遇到有人问怎么将错误信息...原创 2019-09-04 16:34:52 · 9532 阅读 · 0 评论 -
ABP JsonExtensions 内部实现源码
调用方式:str.FromJsonString<List<Guid>>();//字符串转集合list.ToJsonString();//集合转字符串using JetBrains.Annotations;using Newtonsoft.Json;using System;namespace Abp.Json{ public stati...原创 2019-07-24 15:08:56 · 4204 阅读 · 0 评论 -
ABP 在 EntityFramework 中使用扩展实现批量操作
注意:目前批量删除即使已继承 ISoftDelete 的情况下依然会物理删除,所以可以通过批量更新实现逻辑删除。调用方法:await projectsRepository.BatchUpdateAsync(x => new Projects { Status = 2 }, x => projectIdList.Contains(x.Id));以下是批量更新与删除的内部实现...原创 2019-05-04 10:47:27 · 5180 阅读 · 0 评论 -
ABP 继承 ISoftDelete 后调用 HardDeleteAsync 实现物理删除
如标题描述的一样,在继承ISoftDelete 后希望进行物理删除操作时,调用HardDeleteAsync 方法即可。下面是该方法的内部实现:public static async Task HardDeleteAsync<TEntity, TPrimaryKey>(this IRepository<TEntity, TPrimaryKey> repositor...原创 2019-04-27 14:44:38 · 2125 阅读 · 0 评论 -
ABP 如何查询出软删除(SoftDelete)数据
两种使用方式:UnitOfWorkManager.Current.DisableFilter(AbpDataFilters.SoftDelete);.........using (UnitOfWorkManager.Current.DisableFilter(AbpDataFilters.SoftDelete)){ ... ... ...}...原创 2019-04-26 19:44:14 · 8428 阅读 · 0 评论 -
ABP 对 Microsoft.AspNetCore.Identity 规则的封装
1.在 Core.Shared.PasswordComplexitySettingStore中定义了密码规则的 DtoSecurity.PasswordComplexitySetting.cs 该 Dto 定义了密码规则,该规则对应的就是Microsoft.AspNetCore.Identity.HashPassword 中的密码规则。2.在 Application 层 Conf...原创 2019-03-25 14:30:54 · 4688 阅读 · 0 评论 -
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 met...原创 2019-03-13 10:02:01 · 5367 阅读 · 0 评论 -
ABP 部署遇到的问题(记录)
同一个服务部署在局域网 192.168.6.19 上域名 xxx.xxx.xxx(xxx)局域网 IP 地址 192.168.6.19:8002公网 IP 地址 221.178.13.190:80测试用帐号来自租户库中新创建的 xxx 用户,密码为:123qwe id=2测试结果:1.使用域名连接服务,无法登录。(因为连到 Host 库上导致无法登录)2.使...原创 2019-01-28 11:18:50 · 4120 阅读 · 0 评论 -
入门系列-依赖注入
依赖注入ABP的依赖注入系统是基于Microsoft的依赖注入扩展库(Microsoft.Extensions.DependencyInjection nuget包)开发的.因此,它的文档在ABP中也是有效的.模块化由于ABP是一个模块化框架,因此每个模块都定义它自己的服务并在它自己的单独模块类中通过依赖注入进行注册.例:public class BlogModule : Abp...原创 2019-12-05 17:35:22 · 3806 阅读 · 0 评论