ABPvNext-模块

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ABPvNext-模块
⼀、什么是ABP vNext?
ABP.Vnext是⼀个基于 Core Web应⽤程序框架。

主要⽬的是⽤来快速开发Web应⽤,
ABP.Vnext不仅提供完整Web应⽤程序开发模板,⽽且提供Web应⽤程序开发所需要的⼀些基础设施功能。

⼆、什么是Module?
当然每个⼈看问题的⾓度不⼀样,如何能让⾃⼰快速理解就先⽤什么⽅式吧,从万物皆对象的⾓度,也可以说万物皆模块,只是需要⾃⼰去平衡它的边界。

我⾃⼰认为模块就是对所有组件和业务模块的抽象,取的⼀个名字,例如在OA系统中可以按照业务划分考勤模块,请假模块,员⼯模块等,也可以按照⾃⼰理解的⽅式去拆分处模块,最终各个不同的模块拼凑在⼀起协作,形成⼀个完整的应⽤程序,⽅便维护和及快速开发。

三、在ABP中如何使⽤Module
环境vs2019和.NET5
1.控制台应⽤程序
1.创建⼀个控制台应⽤程序
2.然后Nuget安装Abp vNext
Nuget Volo.Abp.Core
3.然后在控制台项⽬中创建模块来使⽤ABP,每⼀个⾃定义模块必须继承AbpModule
public class ConsoleModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
// 1、IOC注册⾃定义类
System.Console.WriteLine("加载AbpModuleModule模块");
//此处可以⽤于当前模块注册⼀些服务
//context.Services.AddSingleton<CustomService>();
//ConsoleHostedService主机服务,需要继承⾃IHostedService
context.Services.AddHostedService<ConsoleHostedService>();
}
}
4.修改Progarm启动类
static void Main(string[] args)
{
CreateHostBuilder(args).RunConsoleAsync().Wait();
}
internal static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration()
.ConfigureServices((hostContext, services) =>
{
//应⽤程序装载⾃定义模块作为启动模块
services.AddApplication<ConsoleModule>();
});
2.Web应⽤程序
1.创建⼀个Web应⽤程序
2.然后Nuget安装Abp.Vnext
Nuget Volo.Abp.Core
3.然后在WEB项⽬中创建⼀个WebModule模块来使⽤ABP,模块必须继承AbpModule
public class WebModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context){}
public override void OnApplicationInitialization(ApplicationInitializationContext context){}
}
4.在原有Startup类中修改代码
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
//在服务中⼼注册WebModule为启动项
services.AddApplication<WebModule>();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
//框架初始化应⽤程序
app.InitializeApplication();
}
}
5.将原有Web中Startup类中的注册服务和配置中间件的内容移到WebModule中
public class WebModule : AbpModule
{
//注册服务
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddControllers();
}
//应⽤程序开始时注册中间件
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
var app = context.GetApplicationBuilder();
var env = context.GetEnvironment();
if (env.IsDevelopment())
{
eDeveloperExceptionPage();
}
eStaticFiles();
eRouting();
eConfiguredEndpoints();
}
}
四、模块依赖注册
1.⾃定义模块
除了项⽬启动模块的使⽤如控制台,web项⽬等,如果要⾃定义模块其实也和上述2种使⽤⽅式相同,并且更为简单,不需要其他的加载项配置,只需要引⼊Abp.Vnext继承⾃AbpModule即可。

创建⼀个⾃定义的公共模块
public class CommonModule : AbpModule
{
//模块加载时配置⼀些操作或初始化服务
public override void ConfigureServices(ServiceConfigurationContext context)
{
System.Console.WriteLine("加载⾃定义CommonModule模块");
}
}
2.模块依赖
假设我在我的控制台项⽬想要依赖我的公共模块,我应该怎么做呢,传统没有使⽤ABP的做法是直接引⼊对应类就可以完成依赖并且使⽤,但是使⽤了ABP框架之后,需要在传统的做法上做⼀些事情,就是在模块类上加⼊ [DependsOn()]特性即可。

例如我的A模块需要依赖我的B模块
[DependsOn(typeof(B))]
public class A : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
System.Console.WriteLine("⾃定义A模块");
}
}
public class B : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
System.Console.WriteLine("⾃定义B模块");
}
}
3.服务注册
⾸先我们要知道服务和模块是被包含的关系,“模块”包含“服务”
在使⽤了ABP框架后在模块中注册服务有3种⽅式
1.在模块类中的ConfigureServices⽅法中⼿动注册服务,但是如果服务增多,ConfigureServices⽅法中将会产⽣⼤量的注册代码,需要维护
public class CommonModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddTransient<CommonService>();
}
}
2.继承⾃约束接⼝例如ITransientDependency,ISingletonDependency,接⼝约束
public class CommonService:ITransientDependency
{
public void Common()
{
System.Console.WriteLine("CommonService 执⾏");
}
}
3.在需要被注册的服务商使⽤特性标记[Dependency(ServiceLifetime.Transient)],推荐使⽤职责分明
//注册服务⽣命周期为瞬时
[Dependency(ServiceLifetime.Transient)]
public class CommonService
{
public void Common()
{
System.Console.WriteLine("CommonService 执⾏");
}
}
五、插件加载
有时候我们想实现某个标准功能的接⼝做⼀个插件模块,按需要⼿动配置到项⽬中,需要的时候就给他配置,不需要就去掉配置,⽽不是像模块依赖⼀样需要强引⽤,那这种做法就可以使⽤abp的插件加载机制
其实原理并不难,知道怎么⽤后,完全可以⾃⼰写⼀个,我们先给出在ABP中的实现步骤
1.使⽤vs创建插件项⽬Common.PlugIn模块
2.然后创建插件⽬录PlugIns
3.然后将Common.PlugIn.dll复制到PlugIns⽬录中
4.然后在Console项⽬中Program加载PlugIns
5.在web项⽬中就是在Startup注册服务中加⼊以下代码
services.AddApplication<ConsoleModule>(options =>
{
options.PlugInSources.AddFolder(@"\Plugin");
});
});。

相关文档
最新文档