一、ABP vNext简介
ABP vNext框架是一个基于ASP.NET核心的完整基础设施,通过遵循软件开发最佳实践和最新技术来创建现代web应用程序和API,这样开发人员可以更加灵活的选择自己需要的功能进行集成,使项目设计更加合理,更加细粒度的模块化设计。
Abp vNext 官方文档提供了非常全面的功能介绍,官方提供了启动模板,模板遵循了领域驱动设计的最佳实践来进行项目分层,引入了常用的功能模块。
二、初步学习ABP vNext练习
这里以控制台项目为例,我使用的是最新版的.net7创建的项目,在下面项目中展示的揭是最新版的Nuget包引入
1、创建项目
2、引入Nuget包(Volo.Abp.Core)
3、书写加载程序集方法
加载程序集需要引入NUget包(Microsoft.Extensions.Hosting)
下面是项目代码演示
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
CreateHostBuild(args).RunConsoleAsync().Wait();
}
/// <summary>
/// 加载程序集
/// </summary>
internal static IHostBuilder CreateHostBuild(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
{
})
.ConfigureServices((hostContxt, sevices) =>
{
//代码加载固定文件
sevices.AddApplication<ConsoleAbpModule>(options =>
{
//加载文件夹下的所有模块
options.PlugInSources.AddFolder("D:\\ABP_vNext\\Plugs");
});
})
.UseAutofac();//.UseAutofac()这是ABP vNext的IOC容器模块
}
4、注册ConsoleAbpModule模块服务类
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp;
using Volo.Abp.Autofac;
using Volo.Abp.Modularity;
namespace ABP_vNext_1_
{
/// <summary>
/// [DependsOn(typeof(AbpAutofacModule))]
/// 集成ABP的IOC模块
/// </summary>
[DependsOn(typeof(AbpAutofacModule))]
//集成自定义模块 [DependsOn(typeof(CustomAbpModule.CustomModule))]
[DependsOn(typeof(CustomAbpModule.CustomModule))]
internal class ConsoleAbpModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Console.WriteLine("重写程序配置信息,将文件ConsoleAbpModule转化为ABP vNext项目文件");
//使用代码固定注册项目文件
//注册方式 、
//1、代码指定注册 => context.Services.AddSingleton<IOCModule>();
//2、接口注册 => IOCModule : ISingletonDependency
//3、特性注册 => [Dependency(ServiceLifetime.Singleton)]
//context.Services.AddSingleton<IOCModule>();
context.Services.AddHostedService<ConsoleHostService>();
}
}
}
5、注册IOC容器类
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.DependencyInjection;
namespace ABP_vNext_1_
{
/// <summary>
/// [Dependency(ServiceLifetime.Singleton)]
/// 注册IOC容器
/// </summary>
[Dependency(ServiceLifetime.Singleton)]
internal class IOCModule /*: ISingletonDependency 接口注入*/
{
public void Show()
{
Console.WriteLine("这是我的IOCModule IOC容器");
}
}
}
6、注册ConsoleHostService实现类
using Microsoft.Extensions.Hosting;
using PlugsInterfaceModule;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ABP_vNext_1_
{
internal class ConsoleHostService : IHostedService
{
//属性依赖注入
public IOCModule IOCModule { get; set; }
/// <summary>
/// 项目启动时发生
/// </summary>
/// <param name="cancellationToken"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public Task StartAsync(CancellationToken cancellationToken)
{
Console.WriteLine("项目启动时发生");
IOCModule.Show();
return Task.CompletedTask;
}
/// <summary>
/// 项目关闭时发生
/// </summary>
/// <param name="cancellationToken"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public Task StopAsync(CancellationToken cancellationToken)
{
return Task.CompletedTask;
}
}
}
7、集成自定义AbpModule模块
新建一个项目,创建一个自定义模块类,实现ABPModule
在主项目中,引入项目,在主项目的服务中使用特性注入,如图
8、集成插件模块PlugModule
8.1 新创建一个项目,实现ABP模块化
8.2 打包发布
、
8.3 在打包发布的文件中找到这个项目的DLL文件
把这个dll文件放到你指定的程序集加载目录中