- 什么是ABP vNext
ABP vNext是一个基于Asp.Net Core Web应用程序框架。主要目的是用来快速开发Web应用。
可以用于开发任何Web应用程序。为什么AbpvNext可以快速开发Web应用?
两个原因:
1、ABP vNext提供完整Web应用程序开发模板。
2、ABP vNext提供Web应用程序开发所需要的一些基础设施功能。
应用程序:运行在操作系统之上的程序都叫应用程序。例如:QQ 微信,淘宝。这些都是应用程序,应用程序分3类:桌面应用程序,Web应用程序,移动应用程序
- 什么是框架
应用程序组件规范。简单讲就是给应用程序取一个共同的名字
例如:支付宝付款,微信付款。这是两个组件,取一个规范。就是支付。
- 什么是Asp.Net Core Web应用程序框架
就把aspnetcore web相关的所有组件规范起来。
所以:ABP vNext就是把aspnetcore web相关的所有的组件规范了。
例如:AspNetCore mvc ioc autofac redis.....会用到很多组件。所以会取一个共同的名字,名字叫做模块。都叫组件也可以。
通俗点:给相识的组件取一个共同的名字
但是在ABP vNext中。叫做Module。
所以:Abp vNext中就以Module作为规范了。
大家把模块理解了,就理解了ABP vNext的核心了。
- 什么是Module?
就是对所有组件和业务模块的抽象。取的一个共同的名字。
- Module好处
目的:快速开发 Web 应用程序
好处:1、提升项目维护性;2、提升项目扩展性;3、提升项目开发效率;
框架总结:1、统一规范(模块化);2、必须基于项目开发;3、必须依赖具体技术;
- ABP vNext使用场景
应用场景
1、Console
2、Web
3、Wpf
4、MAUI
- Console项目使用ABP vNext
条件
1、YDT.ABP.Console
2、Volo.Abp.Core
步骤
1、创建YDT.ABP.Console项目
使用Vs2022创建一个创建一个新的Console项目
2、安装Volo.Abp.Core
在YDT.ABP.Console项目安装
使用Nuget安装 Volo.Abp.Core
3、创建ConsoleModule类
在YDT.ABP.Console项目中创建
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Autofac;
using Volo.Abp.Modularity;
namespace YDT.ABP.Console
{
internal class ConsoleModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
System.Console.WriteLine("console项目转换成abp vNext 模块项目");
}
}
}
4、加载ConsoleModule类
在Program类中加载
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Volo.Abp.Modularity.PlugIns;
namespace YDT.ABP.Console
{
internal class Program
{
static void Main(string[] args)
{
System.Console.WriteLine("Hello, World!");
CreateHostBuilder(args).RunConsoleAsync().Wait();
}
internal static IHostBuilder CreateHostBuilder(string[] args) =-
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =-
{
//setup your additional configuration sources
})
.ConfigureServices((hostContext, services) =-
{
// 1、加载ConsoleModule
services.AddApplication<ConsoleModule- ();
});
}
}
- 如何使用ABP vNext IOC?
条件
1、Volo.Abp.Autofac
2、HelloWorldService
步骤
1、安装Volo.Abp.Autofac
在YDT.ABP.Console项目中安装
通过nuget安装 Volo.Abp.Autofac
<ItemGroup-
<PackageReference Include="Volo.Abp.Core" Version="7.3.0" /-
</ItemGroup-
2、集成Volo.Abp.Autofac
在ConsoleModule类中集成
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Autofac;
using Volo.Abp.Modularity;
namespace YDT.ABP.Console
{
// 1、console项目转换成abp vNext项目
[DependsOn(typeof(AbpAutofacModule))]
internal class ConsoleModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
System.Console.WriteLine("console项目转换成abp vNext 模块项目");
}
}
}
在Program类中集成
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Volo.Abp.Modularity.PlugIns;
namespace YDT.ABP.Console
{
internal class Program
{
static void Main(string[] args)
{
System.Console.WriteLine("Hello, World!");
CreateHostBuilder(args).RunConsoleAsync().Wait();
}
internal static IHostBuilder CreateHostBuilder(string[] args) =-
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =-
{
//setup your additional configuration sources
})
.ConfigureServices((hostContext, services) =-
{
// 1、加载ConsoleModule
services.AddApplication<ConsoleModule- ();
}).UseAutofac();
}
}
3、创建HelloWorldService
在YDT.ABP.Console项目中创建
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
namespace YDT.ABP.Console
{
/// <summary-
/// 3、特性注册
/// 接口直接用来进行框架规范
/// 不建议用来进行做注册使用
/// </summary-
internal class HelloWorldService
{
public void Show()
{
System.Console.WriteLine("HelloWorld IOC容器");
}
}
}
2、注册HelloWorldService
在ConsoleModule类中进行注册
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Autofac;
using Volo.Abp.Modularity;
namespace YDT.ABP.Console
{
// 1、console项目转换成abp vNext项目
[DependsOn(typeof(AbpAutofacModule))]
// 2、集成自定义的abp vNext模块
[DependsOn(typeof(ConsoleCustomModule))]
internal class ConsoleModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
System.Console.WriteLine("console项目转换成abp vNext 模块项目");
// 1、注册HelloWorldService (1、代码注册)
context.Services.AddSingleton<HelloWorldService- ();
// 2、注册ConsoleHostService
context.Services.AddHostedService<ConsoleHostService- ();
}
}
}
3、注入使用HelloWorldService
3.1、先创建ConsoleHostService类
在YDT.ABP.Console项目中创建
using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace YDT.ABP.Console
{
// 1、项目启动的时候,调用
internal class ConsoleHostService : IHostedService
{
public Task StartAsync(CancellationToken cancellationToken)
{
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken)
{
return Task.CompletedTask;
}
}
}
3.2、在ConsoleHostService类中使用
using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace YDT.ABP.Console
{
// 1、项目启动的时候,调用
internal class ConsoleHostService : IHostedService
{
// 1、使用HelloWorldService(属性依赖注入)
public HelloWorldService helloWorldService { set; get; }
public Task StartAsync(CancellationToken cancellationToken)
{
//2、直接使用
helloWorldService.Show();
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken)
{
return Task.CompletedTask;
}
}
}
也可以使用接口注册
internal class HelloWorldService : ISingletonDependency
也可以使用特性注册
[Dependency(ServiceLifetime.Singleton)]
internal class HelloWorldService
注:建议使用特性注册,接口直接用来进行框架规范,不建议用来进行做注册使用。
- 如何调用自定义模块?
条件
1、YDT.ABP.CustomModule
2、Volo.Abp.Core
步骤
1、创建YDT.ABP.CustomModule
使用vs2022创建YDT.ABP.CustomModule项目
2、安装Volo.Abp.Core
在YDT.ABP.CustomModule项目中安装
3、创建ConsoleCustomModule类
在YDT.ABP.CustomModule项目中创建
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Modularity;
namespace YDT.ABP.Console
{
/// <summary-
/// 1、自定义模块
/// </summary-
public class ConsoleCustomModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
System.Console.WriteLine("console自定义abp vNext 模块项目");
}
}
}
4、引用YDT.ABP.CustomModule项目
在YDT.ABP.Console项目中引用
使用项目引用工具,引用YDT.ABP.CustomModule
5、集成YDT.ABP.CustomModule项目
在YDT.ABP.Console项目中的ConsoleModule类中集成
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Autofac;
using Volo.Abp.Modularity;
namespace YDT.ABP.Console
{
// 1、console项目转换成abp vNext项目
[DependsOn(typeof(AbpAutofacModule))]
// 2、集成自定义的abp vNext模块
[DependsOn(typeof(ConsoleCustomModule))]
internal class ConsoleModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
System.Console.WriteLine("console项目转换成abp vNext 模块项目");
// 1、注册HelloWorldService (1、代码注册)
context.Services.AddSingleton<HelloWorldService- ();
// 2、注册ConsoleHostService
context.Services.AddHostedService<ConsoleHostService- ();
}
}
}
- 如何使用自定义插件模块?
条件
1、YDT.ABP.PluginModule
2、YDT.ABP.Console
3、Volo.Abp.Core
4、plugins目录
步骤
1、创建YDT.ABP.PluginModule项目
使用vs2022创建YDT.ABP.PluginModule项目
2、安装Volo.Abp.Core
在YDT.ABP.PluginModule项目中安装
3、创建ConsolePluginModule类
在YDT.ABP.PluginModule项目中创建
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Modularity;
namespace YDT.ABP.Console
{
/// <summary-
/// 1、自定义插件
/// </summary-
public class ConsolePluginModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
System.Console.WriteLine("console自定义abp vNext 插件模块项目");
}
}
}
4、发布ConsolePluginModule项目
使用vs2022发布ConsolePluginModule项目
5、安装ConsolePluginModule插件
5.1、创建plugIns目录
在windows10上创建
5.2、安装ConsolePluginModule插件
将YDT.ABP.PluginModule.dll复制到plugIns目录
6、加载ConsolePluginModule插件
在YDT.ABP.Console项目中加载
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Volo.Abp.Modularity.PlugIns;
namespace YDT.ABP.Console
{
internal class Program
{
static void Main(string[] args)
{
System.Console.WriteLine("Hello, World!");
CreateHostBuilder(args).RunConsoleAsync().Wait();
}
internal static IHostBuilder CreateHostBuilder(string[] args) =-
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =-
{
//setup your additional configuration sources
})
.ConfigureServices((hostContext, services) =-
{
// 1、加载ConsoleModule(并加载自定义插件模块项目)
services.AddApplication<ConsoleModule- (options =- {
// 2、加载插件目录。
options.PlugInSources.AddFolder("F:\\work\\.net_project\\微服务框架ABP vNext\\1、核心根基-模块化\\plugins");
});
}).UseAutofac();
}
}
- 项目中如何使用插件Service
条件
1、YDT.ABP.IPluginModuleInterface
步骤
1、创建YDT.ABP.IPluginModuleInterface项目
使用vs2022创建插件项目YDT.ABP.IPluginModuleInterface
2、创建IVideoUploadService接口
在YDT.ABP.IPluginModuleInterface项目中创建
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace YDT.ABP.Console
{
/// <summary>
/// 1、视频上传Service接口
/// 规范:让主项目YDT.ABP.Console 和 插件项目共同依赖YDT.ABP.PluginModule
/// </summary>
public interface IVideoUploadService
{
public void Upload();
}
}
3、实现IVideoUploadService接口
在YDT.ABP.PluginModule项目中实现
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
namespace YDT.ABP.Console
{
/// <summary>
/// 1、视频上传Service
/// 先注册VideoUploadService
/// </summary>
[Dependency(ServiceLifetime.Singleton)]
public class VideoUploadService : IVideoUploadService
{
public void Upload()
{
System.Console.WriteLine("开始直播视频上传");
}
}
}
4、依赖YDT.ABP.IPluginModuleInterface项目
在YDT.ABP.Console项目中依赖
在YDT.ABP.PluginModule项目中依赖
步骤
1、使用vs2022创建插件项目YDT.ABP.IPluginModuleInterface
2、然后创建插件插件接口IPluginService
3、然后其他项目引用插件接口项目即可
5、使用IVideoUploadService接口
在YDT.ABP.Console项目中的ConsoleHostService中使用
using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace YDT.ABP.Console
{
// 1、项目启动的时候,调用
internal class ConsoleHostService : IHostedService
{
// 1、使用HelloWorldService(属性依赖注入)
public HelloWorldService helloWorldService { set; get; }
// 2、使用FileUploadService
public FileUploadService fileUploadService { set; get; }
// 3、使用VideoUploadService (使用接口间接使用)_
public IVideoUploadService videoUploadService { set; get; }
/* public ConsoleHostService(HelloWorldService helloWorldService)
{
this.helloWorldService = helloWorldService;
}*/
public Task StartAsync(CancellationToken cancellationToken)
{
//2、直接使用
helloWorldService.Show();
// 3、使用文件上传
fileUploadService.Upload();
// 4、开始视频上传
// for
// 如何获取集合的实现类。List<IVideoUploadService> list =
// IServiceProvider.GetServces<IVideoUploadService>();
// for 循环执行
videoUploadService.Upload();
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken)
{
return Task.CompletedTask;
}
}
}
热插拔项目动态添加,动态删除,不修改主项目
Console使用ABP vNext 3种项目形式
1、使用默认封装ABP vNext模块
2、使用自定义封装的ABP vNext模块
3、使用自定义插件ABP vNext模块
- Web项目如何使用Abp vNext(Module)
条件
1、YDT.ABP.WebAPI
2、Volo.Abp.AspNetCore.Mvc
步骤
1、创建YDT.ABP.WebAPI项目
使用Vs2022创建一个新的YDT.ABP.WebAPI
2、安装Volo.Abp.AspNetCore.Mvc
在YDT.ABP.WebAPI项目中安装
使用nuget安装 Volo.Abp.AspNetCore.Mvc
3、创建WebAPIModule类
在YDT.ABP.WebAPI项目中创建
using Volo.Abp;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Autofac;
using Volo.Abp.Modularity;
namespace YDT.ABP.WebAPI
{
/// <summary>
/// WebAPIModule
/// 1、集成AbpAspNetCoreMvcModule
/// </summary>
[DependsOn(typeof(AbpAspNetCoreMvcModule))]
// 2、集成了Autofac
[DependsOn(typeof(AbpAutofacModule))]
public class WebAPIModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
// 1、注册到IOC容器
context.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
context.Services.AddEndpointsApiExplorer();
context.Services.AddSwaggerGen();
}
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
// 1、获取app
var app = context.GetApplicationBuilder();
// 2、获取环境
var env = context.GetEnvironment();
// Configure the HTTP request pipeline.
if (env.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
}
}
}
4、加载WebAPIModule类
在YDT.ABP.WebAPI项目中加载
namespace YDT.ABP.WebAPI
{
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
// 1、加载WebAPIModule
builder.Services.AddApplication<WebAPIModule>();
// 2、将Add方法放到WebAPIModule中(在IOC容器中注册Service)
var app = builder.Build();
// 3、加载中间件
app.InitializeApplication();
// 4、将Use方法放到WebAPIModule中 (加载中间件middle)
app.MapControllers();
app.Run();
}
}
}
5、改造Program类
在YDT.ABP.WebAPI项目中改造
namespace YDT.ABP.WebAPI
{
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
// 1、加载WebAPIModule
builder.Services.AddApplication<WebAPIModule>();
// 2、将Add方法放到WebAPIModule中(在IOC容器中注册Service)
var app = builder.Build();
// 3、加载中间件
app.InitializeApplication();
// 4、将Use方法放到WebAPIModule中 (加载中间件middle)
app.MapControllers();
app.Run();
}
}
}
- Web项目如何使用Autofac
条件
1、Volo.Abp.Autofac
步骤
[DependsOn(typeof(AbpAutofacModule))]
- 模块执行原理?Volo.Abp.Core如何执行模块
条件
1、反射
2、递归
- 如何快速创建ABP vNext项目。去掉手动集成。
1、快速创建Console项目
前提
1、ABP vNext项目模板
2、ABP CLI
使用CLI 创建 ABP vNext项目模板
console
abp new YDT.Project.Console -t console -csf (生成解决方案目录)
mvc
abp new YDT.Project.WebMVC -t app-nolayers -dbms MySQL -csf
webapi
abp new YDT.Project.WebAPI -t app-nolayers --dbms mysql -u none -csf
- 如何快速创建Abp vNext项目
条件
ABP CLI
步骤
1、ABP CLI安装
dotnet tool install -g Volo.Abp.Cli
2、ABP CLI 版本更新
dotnet tool update -g Volo.Abp.Cli
3、Web模板项目创建
默认 mvc项目
abp new YDT.Project.Web.mvc -dbms MySQL -csf
单体MVC项目
abp new YDT.Project.Web.mvc -t app-nolayers -dbms MySQL -csf
单体web api项目
abp new YDT.Project.Web.api -t app-nolayers --dbms mysql -u none -csf
4、Console模板项目创建
abp new YDT.Project.Console -t console -csf
5、Module模板项目创建
abp new YDT.Project.Module -t module -csf
Module+无用户界面
abp new YDT.Project.Module.NoUi -t module --no-ui -csf
模块+mysql
abp new YDT.Project.Module.NoUi -t module --no-ui --dbms mysql -csf
6、ABP CLI详细用法
请参考文档。
- 如何运行Abp vNext Web项目
条件
1、数据迁移YDT.Project.Web.DbMigrator
2、运行项目YDT.Project.Web.Web