ABP vNext-核心根基-模块化

- 什么是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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值