升级Abp 本系列教程是基于Abp V1.0版本,现在Abp版本已经升级至V1.4.2(截至至文章发布时间),其中新增了New Feature,并对Abp做了相应的Enhancements,以及Bug...下面就请按我的步骤来将Abp由V1.0升级至V1.4.2。 1.1. 过滤Abp Nuget包 VS打开解决方案文件,右键解决方案(不是某个项目),选中【管理解决方案的Nuget程序包(N)...】...所以这一次,我们保险起见,只升级Abp相关Nuget程序包。 选中【更新】,在搜索框中录入Abp进行筛选Abp相关Nuget程序包(一共16个)。 1.2....定位一看,原来是Abp修改了默认IAbpSession的实现类ClaimsAbpSession。...下载与本地模板项目版本一致的Abp源码 首先去看看Abp的Releases目录,找到对应版本的Source code.zip,下载即可。 2.2.
ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称。...框架 ABP是基于最新的ASP.NET CORE,ASP.NET MVC和Web API技术的应用程序框架。...架构 ABP实现了多层架构(领域层,应用层,基础设施层和表示层),以及领域驱动设计(实体,存储库,领域服务,应用程序服务,DTO等)。还实现和提供了良好的基础设施来实现最佳实践,如依赖注入。...我在『简书』创建了『ABP专题』,该专题收录了所有ABP相关的文章,欢迎大家关注学习并将自己学习ABP的总结投稿至此专题。 本系列文章主要是基于ABP模板开发Mpa(多页面)『任务清单』项目。...由于是入门系列,不会用到代码生成器,每一行代码都是手动敲入。 源码已上传至Github-LearningMpaAbp,可自行参考。 本系列基于持续总结,会持续更新,请关注学习。
1、首先来看看它们分别对应的类型是什么? 查看源码发现Session是定义在Controller中的类型为HttpSessionStateBase的属性。...multiTenancy; PrincipalAccessor = DefaultPrincipalAccessor.Instance; } } 其中IPrincipalAccessor又是什么鬼...那ClaimsPrincipal又是什么鬼?我就喜欢你这打破砂锅问到底的劲,且听我娓娓道来。...其中姓名、性别、民族、出生、住址、公民省份号码这些是身份信息类别(ClaimsType),微软已经给我们预定义了一系列的身份信息类别,其中包括(Email、Gender、Phone等等)。 ?...因为现实生活中也是这样,我们有身份证、银行卡、社保卡等一系列证件。
但只能对自己创建的任务进行查找、修改 管理员可以创建任务并分配给他人 管理员具有删除任务的权限 从以上的信息中,我们可以提取出以下权限: 任务分配权限 任务删除权限 那我们下面就来实现针对这两个权限的管理: 一、ABP...PermissionManager:权限管理类,继承自PermissionDefinitionContextBase主要提供了获取权限的系列方法。 2、再来看看权限检查相关类型 ?...ABP模板项目中已经在领域层,也就是.Core结尾的项目中,定义了xxxxxxAuthorizationProvider类继承自AuthorizationProvider。...在ABP模板项目中暂未提供用户角色权限管理功能,但在AbpZero中提供了该功能,支持按用户或角色赋予权限。那咋办呢? 咱们退而求其次,在数据库初始化的时候,将权限赋给Admin。...总结: 本节主要讲解了ABP权限管理的基本实现方式,以及如何定义、使用和添加权限。 在ABP模板项目中暂未提供用户角色权限管理功能,但在AbpZero中提供了该功能,支持按用户或角色赋予权限。
首先很庆幸ABP已经帮我们封装了分页实现,实在是贴心啊。 来来来,这一节咱们就来捋一捋如何使用ABP的进行分页吧。...在ABP源码中并没有为我们封装这样公用的类,但是在ABPZero项目中,定义了相应的分页Dto。 对应的类图如下: ?...代码中使用的是什么分页技术?(真分页?假分页?)...五、使用X.PagedList进行前端分页 在Asp.Net Mvc中进行前端分页有一系列开源实现,在我的Demo中使用的是开源的X.PagedList分页。...总结 本节主要讲解了如何使用ABP进行后台分页,并顺带讲解了ABP后台分页逻辑的实现方式。同时也演示了如何使用X.PagedList进行前端分页。
ABP中对邮件的封装主要集成在Abp.Net.Mail和Abp.Net.Mail.Smtp命名空间下,相应源码在此。...#一、Abp集成的邮件模块是如何实现的 分析可以看出主要由以下几个核心类组成: EmailSettingNames:静态常量类,主要定义了发送邮件需要的相关参数:Port、Host、UserName、Password...想具体了解源码的实现方式,建议参考以下两篇博文: 结合ABP源码实现邮件发送功能 ABP源码分析七:Setting 以及 Mail # 二、如何使用Abp集成的邮件系统发送邮件 1....emailSender.Send("ysjshengjie@qq.com", task.AssignedPerson.EmailAddress, "New Todo item", message); # 三、如何使用Abp
如果只是简单的去介绍如何去使用ABP,我只需参照官方文档,实现到任务清单Demo中去就可以了,不劳神不费力。但是,这样就等于一知半解。 知之为知之,不知为不知,是知也。...后续的文章我会继续保持之前的书写风格,并适当穿插一些对DDD中的概念的理解,来加深对ABP框架的学习。...NotificationSeverity.Info, new[] { updateTask.AssignedPerson.ToUserIdentifier() }); } } } 以上代码也能满足以上需求,但是这已经违背了ABP...ABP中定义了IDomainService接口,按约定所有的领域服务都要实现它,实现之后,领域服务被自动暂时的注册到依赖注入系统。...这里,我们定义一个ITaskManager(Abp中约定俗成的领域服务命名规则,以Manager结尾,当然你也可以自行命名)来定义我们的领域服务,然后实现它。
浅入 ABP 系列(4):事件总线 版权护体©作者:痴者工良,微信公众号转载文章需要 《NCC开源社区》同意。...目录 浅入 ABP 系列(4):事件总线 事件总线 关于事件总线 为什么需要这个东西 事件总线创建过程 订阅事件 事件 发布事件 全局异常加入事件总线功能 创建事件 订阅事件 发布事件 测试 记录事件...本地事件总线、分布式事件总线,本篇文章讲的是 本地事件总线,系列教程中暂时不考虑讲解 分布式事件总线。...事件总线 需要使用 Volo.Abp.EventBus 库,ABP 包中自带,不需要额外引入。...你可以参考官方文档:https://docs.abp.io/zh-Hans/abp/latest/Local-Event-Bus 为什么需要这个东西 首先列举一下,你工作开发的项目中,编写 控制器时,是不是有这几种代码
在 ABP 中,DTO 位于应用服务层,即本系列文章示例源码中的 AbpBase.Application 项目。...AutoMapper 集成 ABP 的 Volo.Abp.AutoMapper 模块封装或集成了 AutoMapper,所以我们正好使用模块,为 ABP 应用定义对象映射。...IObjectMapper 有两个,一个是 AutoMapper 的接口,一个是 Volo.Abp.ObjectMapping 的 泛型接口。...这句话是抄 ABP 官方文档的。...https://docs.abp.io/zh-Hans/abp/latest/Object-Extensions#validation
若想了解DDD中领域事件的概念,可参考DDD理论学习系列(9)-- 领域事件。 ? Abp中使用事件总线来实现领域事件,而关于事件总线的实现,大家可参考我这篇博文——事件总线知多少,本文将不再赘述。...应用程序启动时Abp根据约定俗成的命名规则将事件源和事件处理注册到了依赖容器中和事件总线维护的容器中。我们也可以自行在应用服务或领域服务中手动注册。 领域事件在哪触发(发布)?
不过,ABP已经为大家考虑了这一点,集成了通用的创建和显示菜单的方式。其主要代码集成在Abp.Application.Navigation命名空间下,相应源码在此。...一、如何使用Abp集成的导航菜单 针对我们的『任务清单』Deom,我们需要在导航栏上添加一个【Task List】的菜单入口。...二、Abp集成的导航菜单的代码结构 1.先来看看相关代码的类型依赖关系图 ? 分析发现,abp集成的导航菜单实际上是应用了组合设计模式。...三、Abp集成的导航菜单的具体实现 核心逻辑:NavigationManager遍历NavigationConfiguration中维护的NavigationProvider列表,并调用NavigationProvider
(通过继承该接口,ABP会自动帮助依赖注入) ABP为IApplicationService提供了默认的实现ApplicationService,该基类提供了方便的日志记录和本地化功能。...ABP中,一个应用服务方法默认是一个工作单元(Unit of Work)。ABP针对UOW模式自动进行数据库的连接及事务管理,且会自动保存数据修改。...数据隐藏 序列化和延迟加载问题 ABP对DTO提供了约定类以支持验证 参数或返回值改变,通过Dto方便扩展 了解更多详情请参考: ABP框架 - 数据传输对象 3,Dto规范 (灵活应用) ABP建议命名输入...It's called by ABP after data annotation validations....了解DTO验证可参考 ABP框架 - 验证数据传输对象 ##4, 最后来看一下GetTasksInput的定义 其中包括两个属性用来进行过滤。
来简要介绍下Abp中Json的用法。为什么要在这一节讲呢?当然是做铺垫啊,后面的系列文章会经常和Json这个东西打交道。...三、Abp中对Json的封装 所以Abp封装了AbpJsonResult继承于JsonResult,其中主要添加了两个属性: CamelCase:大小驼峰(默认为true,即小驼峰格式) Indented...ABP中提供了AbpDateTimeConverter类继承自IsoDateTimeConverter。..., "details": "..." }, "unAuthorizedRequest": false } 当不需要abp对json进行封装包裹怎么办? 简单。...这个特性其实是一个快捷方式用来告诉ABP不要用AbpJsonResult包裹我,看源码就明白了: namespace Abp.Web.Models { [AttributeUsage(AttributeTargets.Class
这一节我们就针对这一案例来看一看Abp中如何使用缓存来提高程序性能。 2. Abp的缓存机制 在直接使用缓存之前,我们还是来简单梳理下Abp的缓存机制。...Abp对缓存进行抽象定义了ICache接口,位于Abp.Runtime.Caching命名空间。...Abp缓存实操演练 3.1....Redis是什么玩意 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。...Abp集成Redis 首先打开Web层,下载Abp.RedisCache Nuget包安装。
引言 之前的文章ABP入门系列(7)——分页实现讲解了如何进行分页展示,但其分页展示仅适用于前台web分页,在后台管理系统中并不适用。后台管理系统中的数据展示一般都是使用一些表格插件来完成的。...:过滤参数,指定过滤的任务状态 这里面要注意的是参数的命名和顺序必须和前端传参保持一致 细心的你可能发现Action使用了[DontWrapResult]特性进行修饰,这样返回的json结果就不会被Abp...提供的AbpJsonResult包裹,了解AbpJsonResult可参考ABP入门系列(8)——Json格式化。...添加List.cshtml进行列表展示 List.cshtml中主要的代码为: @using Abp.Web.Mvc.Extensions @{ ViewBag.Title = L("BackendTaskList...Button的点击事件 var oButtonInit = new ButtonInit(); oButtonInit.Init(); }); var taskService = abp.services.app.task
Abp作为一个优秀的框架,自然也应用了单元测试。Abp的代码都通过XUnit进行了单元测试。下面我们就延续Abp的优良作风,为我们的业务代码编写单元测试。 2. 对Abp模板测试项目一探究竟 ?...测试项目结构 如图所示,通过在Abp官网创建的模板项目中,默认就已经为我们创建好了测试项目。并对Session、User创建了单元测试。...打开测试项目的NuGet程序包我们可以发现主要依赖了以下几个NuGet包: Abp.TestBase:提供了测试基类和基础架构以便我们创建单元集成测试。...至此我们对abp为我们默认创建的测试项目有了一个大概的认识。下面我们就开始实战阶段。 3. 单元测试实战 3.1....总结 这篇文章中主要梳理了Abp中如何进行单元测试,以及依赖的xUnit、Effort、Shouldly框架的用法。并基于以上内容的总结,进行了单元测试的实战演练。
首先我们要对ABP的体系结构以及从模板创建的解决方案进行一一对应。网上有代码生成器去简化我们这一步的任务,但是不建议初学者去使用。...一、首先来看看ABP体系结构 领域层就是业务层,是一个项目的核心,所有业务规则都应该在领域层实现。 实体(Entity): 实体代表业务领域的数据和操作,在实践中,通过用来映射成数据库表。...三、创建Task实体 1.在领域层创建Tasks文件夹,并创建Task实体类; 2.ABP中所有的实体类都继承自Entity,而Entity实现了IEntity接口;而IEntity接口是一个泛型接口,...DefaultTestDataForTask() { _tasks = new List() { new Task("Learning ABP...deom", "Learning how to use abp framework to build a MPA application."), new Task("Make
这里我们直接用ABP模板里面的Angular的前端界面。...abp new FunShow -u angular --separate-identity-server 创建完后目录会有两个文件夹 把Angualr目录赋值到我们微服务项目的APP目录下...import { Environment } from '@abp/ng.core'; const baseUrl = 'http://localhost:4200'; export const environment
浅入 ABP 系列(6):数据库配置 版权护体©作者:痴者工良,微信公众号转载文章需要 《NCC开源社区》同意。...目录 浅入 ABP 系列(6):数据库配置 创建标准的 EFCore 数据库上下文 连接字符串 定义隔离的上下文 多数据库支持和配置 Freesql 配置服务 本系列的第五篇:https://www.cnblogs.com.../whuanle/p/13061059.html 因为这一部分属于 ASP.NET Core 的基础部分,ABP 没有封装,因此没啥要说的。...这一篇我们将来学习如何在 ABP 中添加数据库配置以及划分一个简单数据库模块的结构,我们将使用 EFCore + Freesql 来搭建数据库模块。 强烈推荐 Freesql!...连接字符串 ABP 中,可以在上下文类加上一个 ConnectionStringName 特性,然后在配置服务时,ABP 会自动为其配置连接字符串。
引言 Abp支持MySql已经不是什么新鲜事了,但按照官方文档:Entity Framework - MySql Integration来,你未必能成功切换,本文就记录下切换MySql数据库遇到的一些坑...然后Tools-->Nuget Package Manage--> Package Manage Console:输入Add-Migration "Abp_MoveTo_Mysql"执行: ?...最后 好久没更新了,现在重拾Abp,后续会结合ABP+.Net Core+MySQL,带给大家进阶分享,尽情期待!
领取专属 10元无门槛券
手把手带您无忧上云