ABP vNext-模块


一、什么是ABP vNext?

ABP.Vnext是一个基于Asp.Net 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())
       {
           app.UseDeveloperExceptionPage();
       }
       app.UseStaticFiles();
       app.UseRouting();
       app.UseConfiguredEndpoints();
    }
}

四、模块依赖注册

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");
    });
});
引用来源:https://www.cnblogs.com/yuxl01/p/15673842.html

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
管理员
上一篇:了解LINQ
下一篇:没有了
评论列表

发表评论

评论内容
昵称:
关联文章

ABP vNext-模块
ABP VNext框架中对HttpApi模块的控制器进行基类封装
ABP VNext框架基础知识介绍(1)--框架基础类继承关系
ABP VNext框架中Winform终端的开发和客户端授权信息的处理
利用代码生成工具Database2Sharp生成ABP VNext框架项目代码
网站迁移纪实:从Web Form 到 Asp.Net Core (Abp vNext 自定义开发)
模块维护
C# Abp框架入门系列文章(一)
python安装pythoncom模块
业务模块特殊URL配置
Python安装使用yaml模块
YESWEB业务模块中指定系统表
业务模块中访问系统表
git仓库子模块(submodule)项目中的实战应用
YESWin Winform开发框架 业务模块项目模板制作
YESWin winform开发框架 新建一个业务模块项目
YESWin winform开发框架 模块功能注册配置
YESWEB第三方业务模块数据库配置
YESWinform开发框架关于模块功能不同权限下的布局介绍
Python使用UUID模块云服务器上获取MAC地址,重启后就不一样了

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码