您现在的位置是:网站首页> 编程资料编程资料
搭建基础结构的ABP解决方案介绍_基础应用_
2023-05-24
293人已围观
简介 搭建基础结构的ABP解决方案介绍_基础应用_
搭建项目基础结构
打开 VS 2019,创建一个解决方案,然后删除解决方案的项目,变成空解决方案。本系列教程将使用 AbpBase 来命名解决方案和项目前缀。
在解决方案中新建一个解决方案文件夹,名字为 src,用来存放项目源码。

我们将要创建一个类似下图这样的层次结构的解决方案,只是没有 HttpApi.Client ,另外.EntityFrameCore 改成了 .Database。

下面我们来创建需要的项目结构,和了解每一个项目的作用。
AbpBase.Domain.Shared
此项目是最底层的模块,且不依赖其他模块,主要用于定义各种枚举(enums)、全局常量(constants)、静态变量(static)、启动依赖配置(options)等。还可以在此为程序设置一个标准,限制各个层次的模块都必须符合此标准的要求。
例如 规定API 请求的一般参数,字符串长度不得大于 256 个字符,我们可以这样写:
public static Whole { public const int MaxLength = 256; } [StringLength(maximumLength:Whole.MaxLength)]总之,这个模块用于定义各种全局的、共享的内容(变量、枚举等),一般不包含服务。
创建过程
在解决方案中新建 .NET Standard 项目,名称为 AbpBase.Domain.Shared,然后通过 Nuget 添加 Volo.Abp.Core 包,版本为 3.1.2。

然后新建 一个 AbpBaseDomainSharedModule.cs 文件,其内容如下:
using System; using Volo.Abp.Modularity; namespace AbpBase.Domain.Shared { [DependsOn()] public class AbpBaseDomainSharedModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { } } }在 ABP 项目中,每一个模块(项目) 都要创建一个继承 AbpModule 的 类,用于声明此模块的结构、依赖注入等。
[DependsOn] 是依赖注入标记,代表要为模块注入什么服务,因为 .Domain.Shared 不依赖任何模块,因此现在先留空,写成 [DependsOn()] 。
AbpBase.Domain
此项目用于定义各种用于传递数据的类。例如数据库实体、用于做参数传递的模型类等。
创建过程
我们在解决方案的src 文件夹,添加一个新的项目,名字为 AbpBase.Domain,然后引用 AbpBase.Domain.Shared 项目。
在项目中创建一个 AbpBaseDomainModule.cs 文件,其内容如下:
using AbpBase.Domain.Shared; using Volo.Abp.Modularity; namespace AbpBase.Domain { [DependsOn( typeof(AbpBaseDomainSharedModule) )] public class AbpBaseDomainModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { } } }AbpBase.Domain 依赖于 AbpBase.Domain.Shared 。
AbpBase.Application.Contracts
主要用于定义接口、抽象和 DTO 对象。这个模块用于定义各种服务,但是不提供实现。
创建过程
在解决方案的 src 文件夹,新建一个 AbpBase.Application.Contracts 项目,然后添加 AbpBase.Domain 项目引用。
在项目里新建一个 AbpBaseApplicationContractsModule 文件,其内容如下:
using AbpBase.Domain; using Volo.Abp.Modularity; namespace AbpBase.Application.Contracts { [DependsOn( typeof(AbpBaseDomainModule) )] public class AbpBaseApplicationContractsModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { } } }AbpBase.Database
此模块用于配置和定义 EFCore、Freesql 等 ORM,还有仓储等,主要是处理数据库相关的代码。
创建过程
在解决方案 的 src 目录新建一个 AbpBase.Database 项目,然后添加 AbpBase.Domain 项目引用。
在项目中新建一个 AbpBaseDatabaseModule 文件,其内容如下:
using AbpBase.Domain; using Volo.Abp.Modularity; namespace AbpBase.Database { [DependsOn( typeof(AbpBaseDomainModule) )] public class AbpBaseDatabaseModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { } } }ABP 里面默认集成了 EFCore ,所以我们可以直接拿来使用,这里我们先不处理数据库相关的东西,但是先提前配好依赖注入。
在 Nuget 管理器中,添加下面四个包,版本都是 3.1.2 :
Volo.Abp.EntityFrameworkCore Volo.Abp.EntityFrameworkCore.MySQL Volo.Abp.EntityFrameworkCore.Sqlite Volo.Abp.EntityFrameworkCore.SqlServer
然后将 AbpBaseDatabaseModule.cs 文件的内容修改成如下内容:
using AbpBase.Domain; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.MySQL; using Volo.Abp.EntityFrameworkCore.Sqlite; using Volo.Abp.EntityFrameworkCore.SqlServer; using Volo.Abp.Modularity; namespace AbpBase.Database { [DependsOn( typeof(AbpBaseDomainModule), typeof(AbpEntityFrameworkCoreModule), typeof(AbpEntityFrameworkCoreSqliteModule), typeof(AbpEntityFrameworkCoreSqlServerModule), typeof(AbpEntityFrameworkCoreMySQLModule) )] public class AbpBaseDatabaseModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { } } }这样,我们的项目将可以支持三种数据库的使用。
AbpBase.Application
此用于实现接口、编写各种服务。
创建过程
在解决方案的 src 文件夹,新建一个 AbpBase.Application 项目,然后添加 AbpBase.Application.Contracts 、 AbpBase.Database 项目引用。
在项目里创建一个 AbpBaseApplicationModule.cs 文件,其文件内容如下:
using AbpBase.Application.Contracts; using AbpBase.Database; using AbpBase.Domain; using Volo.Abp.Modularity; namespace AbpBase.Application { [DependsOn( typeof(AbpBaseDomainModule), typeof(AbpBaseApplicationContractsModule), typeof(AbpBaseDatabaseModule) )] public class AbpBaseApplicationModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { } } }AbpBase.HttpApi
此项目用于编写 API 控制器。
创建过程
创建 一个 .NET Core 控制台项目,名字为 AbpBase.HttpApi,通过 Nuget 添加 Volo.Abp.AspNetCore.Mvc 包,版本为 3.1.2。
然后添加 AbpBase.Application.Contracts 和 AbpBase.Application 两个项目引用。
在项目里面创建一个 AbpBaseHttpApiModule.cs 文件,其内容如下:
using AbpBase.Application; using AbpBase.Application.Contracts; using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.Modularity; namespace AbpBase.HttpApi { [DependsOn( typeof(AbpAspNetCoreMvcModule), typeof(AbpBaseApplicationModule), typeof(AbpBaseApplicationContractsModule) )] public class AbpBaseHttpApiModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { Configure(options => { options .ConventionalControllers .Create(typeof(AbpBaseHttpApiModule).Assembly, opts => { opts.RootPath = "api/1.0"; }); }); } } } 上面,模块的 ConfigureServices 函数里面,创建了 API 服务。
AbpBase.Web
此模块是最上层的模块,用于提供 UI 与用户交互、权限控制、提供启动配置信息、控制程序运行等。
创建过程
在解决方案的 src 文件夹,新建一个 AbpBase.Web 项目,项目为 ASP.NET Core 程序,并且创建模板为“空”。
通过 Nuget 管理器添加 Volo.Abp.Autofac,版本为 3.1.2,然后添加 AbpBase.Application 和 AbpBase.HttpApi 项目引用。
在项目里面创建 AbpBaseWebModule.cs 文件,其内容如下:
using AbpBase.Application; using AbpBase.HttpApi; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.Hosting; using Volo.Abp; using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.Modularity; namespace AbpBase.Web { [DependsOn( typeof(AbpBaseApplicationModule), typeof(AbpAspNetCoreMvcModule), typeof(AbpBaseHttpApiModule) )] public class AbpBaseWebModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { } public override void OnApplicationInitialization( ApplicationInitializationContext context) { var app = context.GetApplicationBuilder(); var env = context.GetEnvironment(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); } app.UseStaticFiles(); app.UseRouting(); app.UseConfiguredEndpoints(); } } }在 <
相关内容
- ASP.NET Core中的策略授权和ABP授权_实用技巧_
- .NET Core基于EMIT编写的轻量级AOP框架CZGL.AOP_实用技巧_
- ASP.NET Core读取配置文件_基础应用_
- ASP.NET Core选项接口介绍_实用技巧_
- Entity Framework Core延迟加载(懒加载)用法_实用技巧_
- EF Core通过显式编译提高查询性能_实用技巧_
- ASP.NET Core MVC中Required与BindRequired用法与区别介绍_基础应用_
- C#元组类型ValueTuple用法详解_实用技巧_
- WPF开发之利用DrawingVisual绘制高性能曲线图_实用技巧_
- 使用源链接对ASP.NET Core源代码进行调试_实用技巧_
