昏喽喽

vuePress-theme-reco Lio    2020 - 2025
昏喽喽

Choose mode

  • dark
  • auto
  • light
Home
Category
  • CentOS
  • Csharp
  • DataBase
  • DesignMode
  • Vue
  • FrontEnd
  • GLD
  • Kingdee
  • NetWork
Tags
TimeLine
Tools
  • Http请求
  • 日志配置
  • 加密解密
  • 验证码
  • Git命令
About
author-avatar

Lio

103

Articles

15

Tags

Home
Category
  • CentOS
  • Csharp
  • DataBase
  • DesignMode
  • Vue
  • FrontEnd
  • GLD
  • Kingdee
  • NetWork
Tags
TimeLine
Tools
  • Http请求
  • 日志配置
  • 加密解密
  • 验证码
  • Git命令
About

ABP vNext

vuePress-theme-reco Lio    2020 - 2025

ABP vNext

Lio 2021-11-08 ABP

# 核心根基模块化

# 概述

ABP Vnext是一个基于Asp.Net Core Web应用程序框架,主要目的是用来快速开发Web应用。

可以用于开发任何Web应用程序。为什么Abp.Vnext可以快速开发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。

Module:就是对所有组件和业务模块的抽象。取的一个共同的名字。


在ABP中使用依赖注入:可以在类上继承接口[ITransientDependency]或标注特性[Dependency(ServiceLifetime.Singleton)],都可以自动注入到IOC容器。

# Console项目中使用Module

ABP可添加插件,并且执行插件的方法

引入Nuget包:Volo.Abp.Core

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)
        .UseAutofac()
        .ConfigureAppConfiguration((context, config) =>
        {
        })
        .ConfigureServices((hostContext, services) =>
        {
            //从文件夹注册插件
            services.AddApplication<ConsoleModule>(options =>  
            {
                options.PlugInSources.AddFolder(@"D:\Codes\C#\ABP\MyPlugIns");
            });
        });
}


//插件Module
public class PlugInModule:AbpModule
{
    public override void ConfigureServices(ServiceConfigurationContext context)
    {
        base.ConfigureServices(context);
        System.Console.WriteLine("加载插件模块");
    }
    public override void OnApplicationInitialization(ApplicationInitializationContext context)
    {
        base.OnApplicationInitialization(context);
        var myService = context.ServiceProvider.GetRequiredService<PlugInService>();
        myService.Plugin();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

# Web项目中使用Module

在web项目中,ABP将原先在StrapUp类中的服务注册和中间件注册,全部移到了Module中。

[DependsOn(typeof(AbpAspNetCoreMvcModule),typeof(AbpAutofacModule),typeof(CommonModule))]
public class WebModule :AbpModule
{
    public override void ConfigureServices(ServiceConfigurationContext context)
    {
        base.ConfigureServices(context);
        context.Services.AddControllers();
        context.Services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("V1", new OpenApiInfo { Title = "Abp.Web", Version = "1.0.0" });
        });
    }
    public override void OnApplicationInitialization(ApplicationInitializationContext context)
    {
        base.OnApplicationInitialization(context);
        var app = context.GetApplicationBuilder();
        var env = context.GetEnvironment();
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else 
        {
            app.UseExceptionHandler("/Error");
        }
        app.UseStaticFiles();
        app.UseRouting();
        app.UseConfiguredEndpoints();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

然后在Startup,进行注册Module。

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }
    public IConfiguration Configuration { get; }
    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddApplication<WebModule>();
    }
    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.InitializeApplication();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 模块执行原理

# 条件

  • 反射

  • 递归

# 模块总结

框架的核心模块:如缓存, 邮件, 主题, 安全, 序列化, 验证, EF Core集成, MongoDB集成... 等. 它们没有应用/业务功能,它们提供了日常开发经常用到的通用基础设施,集成和抽象。

应用程序模块:这些模块实现了 特定的应用/业务功能 像博客, 文档管理, 身份管理, 租户管理... 等等。

# 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  Project.Web -o D:\work\net-project\ABP专题\1、核心根基模块化\ Project.Web

Mysql mvc项目

abp new  Project.Web --dbms mysql -o D:\work\net-project\ABP专题\1、核心根基模块化\ Project.Web

Mysql web api项目

abp new  Project.Web --dbms mysql -u none -o D:\work\net-project\ABP专题\1、核心根基模块化\ Project.Web.Api

4、Console模板项目创建

  abp new  Project.Console -t console -o D:\work\net-project\ABP专题\1、核心根基模块化\ Project.Console

5、Module模板项目创建

abp new  Project.Module -t module -o D:\work\net-project\ABP专题\1、核心根基模块化\ Project.Module

Module+无用户界面

abp new  Project.Module.NoUi -t module --no-ui -o D:\work\net-project\ABP专题\1、核心根基模块化\ Project.Module.NoUi

模块+mysql

abp new  Project.Module.NoUi -t module --no-ui --dbms mysql -o D:\work\net-project\ABP专题\1、核心根基模块化\ Project.Module.NoUi

6、ABP CLI详细用法

  请参考文档。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

# 运行Abp vNext Web项目

  • 首先配置好相应的数据库连接字符串,启动数据迁移项目Project.Web.DbMigrator;

  • 修改web项目中数据库连接字符串同上,启动web项目。


对于数据库的更新,则在EFCore项目下,使用 Add-Migration,然后输入一个想生成迁移文件的后缀名,最后执行Update-Database,即可更新数据库。参考地址 (opens new window)

默认登录账号为admin,密码为1q2w3E*。