本文主要是介绍ABP VNext学习日记22,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.PreConfigureServices和PostConfigureServices
解析:AbpModule类还定义了PreConfigureServices和PostConfigureServices方法用来在ConfigureServices之前或之后覆盖和编写代码。在这些方法中编写的代码将在所有其它模块的ConfigureServices方法之前/之后执行。
2.OnApplicationInitialization方法
解析:可以在启动应用程序时覆盖OnApplicationInitialization方法来执行代码:
public class BlogModule : AbpModule
{//...public override void OnApplicationInitialization(ApplicationInitializationContext context){var myService = context.ServiceProvider.GetService<MyService>();myService.DoSomething();}
}
OnApplicationInitialization通常由启动模块用于构建ASP.NET Core应用程序的中间件管道:
[DependsOn(typeof(AbpAspNetCoreMvcModule))]
public class AppModule : AbpModule
{//...public override void OnApplicationInitialization(ApplicationInitializationContext context){var app = context.GetApplicationBuilder();var env = context.GetEnvironment();if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseMvcWithDefaultRoute();}
}
3.应用程序初始化前和后
解析:AbpModule类还定义了OnPreApplicationInitialization和OnPostApplicationInitialization方法,用来在OnApplicationInitialization之前或之后覆盖和编写代码。在这些方法中编写的代码将在所有其它模块的OnApplicationInitialization方法之前/之后执行。
4.应用程序关闭
解析:如果要在应用程序关闭时执行某些代码,可以覆盖OnApplicationShutdown方法。
5.框架模块和应用程序模块
解析:
[1]框架模块:这些是框架的核心模块,比如缓存、邮件、主题、安全、序列化、验证、EFCore集成、MongoDB集成等。它们没有应用/业务功能,它们提供了日常开发经常用到的通用基础设施,集成和抽象。
[2]应用程序模块:这些模块实现了特定的应用/业务功能,比如博客、文档管理、身份管理、租户管理等。它们通常有自己的实体、服务、API和UI组件。
6.从文件夹加载插件
解析:IServiceCollection.AddApplication()扩展方法可以获取配置插件源的选项:
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Modularity.PlugIns;namespace MyPlugInDemo.Web
{public class Startup{public void ConfigureServices(IServiceCollection services){services.AddApplication<MyPlugInDemoWebModule>(options =>{options.PlugInSources.AddFolder(@"D:\Temp\MyPlugIns");});}public void Configure(IApplicationBuilder app){app.InitializeApplication();}}
}
7.插件源
解析:options.PlugInSources类是IPlugInSource接口的一系列实现,并且AddFolder方法仅仅是以下表达式的便捷方法:
options.PlugInSources.Add(new FolderPlugInSource(@"D:\Temp\MyPlugIns"));
[1]AddFolder()方法仅在给定目录下查找程序集文件,而不在子目录中查找。可以传递一个SearchOption.AllDirectories参数作为第二个参数,来递归地查找它的子目录。
[2]PlugInSources.AddFiles()方法获取程序集(通常是dll)文件列表,这是使用FilePlugInSource类的快捷方式。
[3]PlugInSources.AddTypes()方法获取模块类类型的列表,如果实用化此方法,那么需要自己加载模块的程序集,但是在需要时它提供了灵活性,这是使用TypePlugInSource类的快捷方式。
8.领域事件
解析:注意领域事件必须继承自DomainService类,否则无法触发事件。
9.批量更新数据库记录
解析:
[1]Z.EntityFramework.Plus
[2]EFCore.BulkExtensions:暂不支持MySql,仅支持Sqlite和MsSql
10.DomainService抽象类
解析:
11.商品领域内部结构
解析:
[1]实体[Entity]
[2]聚合[Aggregate]和聚合根[Aggregate Root]
[3]仓储[Repository]
[4]领域服务[Domain Service]
[5]领域事件[Domain Event]
[6]值对象[Value Object]
[7]规约[Specification]
12.领域服务例子
解析:
[1]ProductService.cs
/// <summary>
/// 支付领域服务
/// </summary>
public class ProductService
{public ProductImageService productImageService { set; get; }public void Update(Product product){product.Id = 2;// 1、更新商品主键productImageService.Update(new ProductImage());}
}
[2]ProductImageService.cs
/// <summary>
/// 商品图片服务
/// </summary>
public class ProductImageService
{public void Update(ProductImage productImage){ ... }
}
13.安装和更新Volo.Abp.Cli
解析:
dotnet tool install -g Volo.Abp.Cli
dotnet tool update -g Volo.Abp.Cli
14.--skip-cli-version-check选项
解析:跳过检查最新版本的ABP CLI,如果没有指定,它会检查最新版本。如果检查到ABP CLI的新版本,会显示一条警告消息。
15.ABP命令列表
解析:
[1]help:展示ABP CLI的用法帮助信息
[2]new:生成基于ABP的启动模板
[3]update:自动更新的ABP解决方案ABP相关的NuGet和NPM包
[4]add-package:添加ABP包到项目
[5]add-module:添加应用模块到解决方案
[6]generate-proxy:生成客户端代理以使用HTTP API端点
[7]remove-proxy:移除以前生成的客户端代理
[8]switch-to-preview:切换到ABP框架的最新预览版本
[9]switch-to-nightly:切换解决方案所有ABP相关包为夜间构建版本
[10]switch-to-stable:切换解决方案所有ABP相关包为最新的稳定版本
[11]translate:当源代码控制存储库中有多个JSON[本地化]
[12]login:使用你在abp.io的用户名和密码在你的计算机上认证
[13]logout:在你的计算机注销认证
[14]install-libs:为MVC/Razor Pages和Blazor Server UI类型安装NPM包
16.ABP解决方案的名称
解析:
[1]二级命名空间:常见的命名方式类似于YourCompany.YourProject
[2]三级命名空间:YourCompany.YourProduct.YourModule
17.Web模板项目创建
解析:
[1]默认MVC项目
abp new YDT.Project.Web -o YDT.Project.Web
[2]Mysql MVC项目
abp new YDT.Project.Web --dbms mysql -o YDT.Project.Web
[3]Mysql Web API项目
abp new YDT.Project.Web --dbms mysql -u none -o YDT.Project.Web.Api
18.Console模板项目创建
解析:
abp new YDT.Project.Console -t console -o YDT.Project.Console
19.Module模板项目创建
解析:
[1]Module+有用户界面
abp new YDT.Project.Module -t module -o YDT.Project.Module
[2]Module+无用户界面
abp new YDT.Project.Module.NoUi -t module --no-ui -o YDT.Project.Module.NoUi
[3]模块+mysql
abp new YDT.Project.Module.NoUi -t module --no-ui --dbms mysql -o YDT.Project.Module.NoUi
20.ABP层次依赖关系
解析:
[1]Domain.Shared所有项目直接或间接依赖此项目,此项目中的所有类型都可以被其它项目所引用。Domain仅依赖Domain.Shared项目,因为Domain.Shared本就属于领域层的一部分。例如,Domain.Shared项目中的枚举类型IssueType被Domain项目中的Issue实体所引用。
[2]Application.Contracts依赖Domain.Shared项目,可以在DTO中重用Domain.Shared中的类型。例如,Domain.Shared项目中的枚举类型IssueType同样被Contracts项目中的CreateIssueDtoDTO所引用。
[3]Application依赖Application.Contracts项目,因为此项目需要实现应用服务的接口及接口使用的DTO。另外也依赖Domain项目,因为应用服务的实现必须依赖领域层中的对象。
[4]EntityFrameworkCore依赖Domain项目,因为此项目需要将领域对象[实体或值对象]映射到数据库的表,另外还需要实现Domain项目中的仓储接口。
[5]HttpApi依赖Application.Contracts项目,因为Controllers需要注入应用服务。
[6]HttpApi.Client依赖Application.Contracts项目,因为此项目需要是使用应用服务。
[7]Web依赖HttpApi项目,因为此项目对外提供HTTP APIs。另外Pages或Components需要使用应用服务,所以还间接依赖Application.Contracts项目。
21.ABP DDD内部调用原理
解析:
22.IDataSeedContributor接口
解析:种子系统。
23.ABP专题
解析:
[1]UnitOfWork实践
[2]多表关联
[3]多租户源码和实践
[4]IDS4和Identity源码
[5]实现ABP模块化
[6]ABP微服务
24.ABP增删改查接口
解析:
[1]基础设施层:EfCoreRepository<EBusinessDbContext, Product, Guid>
[2]领域层:IRepository<Product, Guid>
[3]应用层:ICrudAppService,CrudAppService<Product, ProductDto, Guid>
25.模块化拓扑
解析:
这篇关于ABP VNext学习日记22的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!