
ABP vNext微服务框架
ABP vNext相关知识
愚公搬代码
《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。
《近期荣誉》:2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主,2024年华为云十佳博主等。
《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
展开
-
(精华)2020年8月22日 ABP vNext WebAPI应用ABP
上一节我们创建了基于Razor Page的简单应用,如果我们希望创建单页面应用或者移动应用,就需要通过Web Api调用应用层。Abp提供了从应用层到Web Api的自动映射,我们只需要增加少量的代码就可以,不需要编写重复的Api接口代码。 首先我们增加Swagger支持,使我们的应用支持Web Api浏览和测试,在程序包管理器中增加Swashbuckle.AspNetCore引用。 然后PoemWebModule中增加动态Web Api代码和对Swagger的支持: using Microsoft.Asp原创 2020-08-22 17:26:34 · 494216 阅读 · 1 评论 -
(精华)2020年8月22日 ABP vNext Web应用ABP
现在我们开始创建基于RazorPage的web应用。在解决方案中添加新的Asp.Net Core Web应用项目,名称为ZL.AbpNext.Poem.Web,然后安装volo.Abp.AspNetCore.Mvc和volo.Abp.Autofac,还要添加项目依赖ZL.AbpNext.Poem.Application和ZL.AbpNetx.Poem.EF: 接下来创建Abp模块: using Microsoft.AspNetCore.Builder; using Microsoft.Extensions原创 2020-08-22 16:04:38 · 493198 阅读 · 0 评论 -
(精华)2020年8月22日 ABP vNext 领域层和数据访问层的单元测试
前面我们写了针对Application的单元测试,现在希望增加对领域层和数据访问层的单元测试。首先,需要把测试模块的公共代码抽提出来,创建一个基础模块,还要把测试类中的公共代码抽提出来,创建一个基础的测试类。我们在测试目录下,增加一个新的测试项目,名称为ZL.ApbNext.Poem.TestBase,在这个测试项目下,增加两个基础类: using Microsoft.Extensions.DependencyInjection; using System; using System.Threading.T原创 2020-08-22 16:01:14 · 493024 阅读 · 0 评论 -
(精华)2020年8月22日 ABP vNext 定制Repository
前一节我们看到了使用缺省Repository的局限性。解决这种局限性有两种办法,一种是在Application层引入EF,这样可以在ApplicationService中使用EF的扩展,如Include等,弥补通用Repository的不足。还有一种办法是编写定制的Repository。我们不希望应用层依赖特定的数据库框架(不远的将来我们会把数据移动到MongoDb),所以我们采用第二种办法。 定制Repository需要两部分代码:在领域层的Repository接口和在特定数据访问层种的实现。我们需要定义原创 2020-08-22 15:58:57 · 493682 阅读 · 1 评论 -
(精华)2020年8月22日 ABP vNext DTO在应用层的使用
我们继续应用层的开发,首先创建负责在应用层和展示层之间传递数据的对象,也就是DTO。 使用DTO的原因 为什么需要DTO呢?有如下几个原因。 隔离领域层与表示层,使领域层和表示层可以独立演化,互相不受影响。 数据隐藏,领域层的某些数据需要对表示层隐藏(比如用户密码),在定义DTO时,可以不设置隐藏字段的映射,实现数据隐藏。DTO只返回表示层需要的数据,不多也不少。 避免序列化问题。领域对象中会带有循环引用,比如诗人Poet会引用诗Poems,而诗Poem中又引用了诗人Poet,这种循环引用在序列化时会出现原创 2020-08-22 15:54:55 · 493744 阅读 · 4 评论 -
(精华)2020年8月22日 ABP vNext 进行单元测试
现在我们在应用层中只有两个功能,增加诗人和诗人分页列表: using Volo.Abp.Application.Services; namespace ZL.AbpNext.Poem.Application.Poems { public interface IPoemAppService:IApplicationService { /// <summary> /// 获取诗人分页 /// </summary>原创 2020-08-22 15:51:17 · 493399 阅读 · 0 评论 -
(精华)2020年8月22日 ABP vNext 应用层的使用
现在我们来创建应用层,这样客户端只与应用层打交道就可以了。 与前面创建领域层模块和数据访问EF模块一样,我们在解决方案中增加.Net Core类库项目,作为服务层模块,将项目命名为ZL.AbpNext.Poem.Application,我们需要使用Nuget管理器,为项目增加必要的依赖项,如下: 然后,增加一个Abp模块,名称为PoemApplicationModule,这个模块依赖于PoemCoreModule。 接下来,创建一个目录Poems,在这个目录中增加一个Dto类PoetDto: namesp原创 2020-08-22 15:49:03 · 494061 阅读 · 1 评论 -
(精华)2020年8月22日 ABP vNext 依赖注入
public static void Proccess() { int port = 2018; string host = "127.0.0.1"; IPAddress ip = IPAddress.Parse(host); IPEndPoint ipe = new IPEndPoint(ip, port); Socket sSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, Pr原创 2020-08-21 16:50:58 · 495895 阅读 · 4 评论 -
(精华)2020年8月22日 ABP vNext IRepository的使用
public static void Proccess() { int port = 2018; string host = "127.0.0.1"; IPAddress ip = IPAddress.Parse(host); IPEndPoint ipe = new IPEndPoint(ip, port); Socket sSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, Pr原创 2020-08-21 16:50:10 · 496289 阅读 · 0 评论 -
(精华)2020年8月22日 ABP vNext 领域层的使用
public static void Proccess() { int port = 2018; string host = "127.0.0.1"; IPAddress ip = IPAddress.Parse(host); IPEndPoint ipe = new IPEndPoint(ip, port); Socket sSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, Pr原创 2020-08-21 16:49:43 · 496119 阅读 · 0 评论 -
(精华)2020年8月22日 ABP vNext Poem相关数据库表的Sql语句
public static void Proccess() { int port = 2018; string host = "127.0.0.1"; IPAddress ip = IPAddress.Parse(host); IPEndPoint ipe = new IPEndPoint(ip, port); Socket sSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, Pr原创 2020-08-21 16:48:45 · 495661 阅读 · 0 评论 -
(精华)2020年8月22日 ABP vNext从控制台项目入手
public static void Proccess() { int port = 2018; string host = "127.0.0.1"; IPAddress ip = IPAddress.Parse(host); IPEndPoint ipe = new IPEndPoint(ip, port); Socket sSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, Pr原创 2020-08-21 16:47:56 · 495772 阅读 · 0 评论