菜单栏

ASP.NET Core MVC 应用程序从零开始集成 ABP Framework

@iEricLee Creation Time : 2023-06-07 19:59:56 Last Modification Time : 2023-06-07 19:59:56

本文以 ASP.NET Core MVC 应用程序为例,演示如何从模板空项目开始整合 ABP Framework,开启以轻量级方式使用 ABP Framework 的大门。

创建解决方案

dotnet new webapp -n AbpWebAppRemoteIpAddress

这样我们得到一个空的WEB应用程序,支持 Web/MVC/Razor Pages 基础功能。

aspnet_core_mvc_app_home.png

接下来将该空的WEB应用程序,与 Volo.Abp.AspNetCore.Mvc 模块进行整合。

添加程序集引用

dotnet add package Volo.Abp.AspNetCore.Mvc --version 7.0.1

或者直接在项目文件 .csproj 中添加

<ItemGroup>
    <PackageReference Include="Volo.Abp.AspNetCore.Mvc" Version="7.0.1" />
</ItemGroup>

这样就完成了对 ABP Framework 必要程序集的引用。

接下来开始整合 ABP Framework。

整合 ABP Framework

  1. 创建模块类

    在项目中添加 AppModule.cs 文件

    using Volo.Abp;
    using Volo.Abp.Modularity;
    
    namespace AbpWebAppRemoteIpAddress
    {
        [DependsOn(
            typeof(AbpAspNetCoreMvcModule)
        )]
        public class AppModule : AbpModule
        {
            public override void ConfigureServices(ServiceConfigurationContext context)
            {
    
            }
    
            public override void OnApplicationInitialization(ApplicationInitializationContext context)
            {
    
            }
        }
    }
    

    目前模块类中用于服务注册和管道注册的两个方法是空的,后续会在改造 Program.cs 时将对应的功能移入方法中。

  2. 将服务注册和中间件注册转移到模块类

    改造之前,先分析下 Program.cs 文件默认代码:

    var builder = WebApplication.CreateBuilder(args);
    builder.Services.AddRazorPages();
    var app = builder.Build();
    if (!app.Environment.IsDevelopment())
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseRouting();
    app.UseAuthorization();
    app.MapRazorPages();
    app.Run();
    

    简单来说:应用程序通过 WebApplicationBuilder 创建 WebApplication 并运行 .Run() 。在创建之前配置服务注册,在运行之前进行必要的中间件注册。

    注册服务:builder.Services.AddRazorPages(); 注册中间件:

    app.UseExceptionHandler("/Error"); //异常处理
    app.UseHsts(); //Https
    app.UseHttpsRedirection(); //Https重定向
    app.UseStaticFiles(); //静态文件
    app.UseRouting(); //路由
    app.UseAuthorization(); //授权
    app.MapRazorPages(); //终结点
    

    服务注册和中间注册的代码可以移到 AppModule 对应的方法中:

    public override void ConfigureServices(ServiceConfigurationContext context)
    {
    context.Services.AddRazorPages();
    }
    
    public override void OnApplicationInitialization(ApplicationInitializationContext context)
    {
    var app =context.GetApplicationBuilder();
    var evn = context.GetEnvironment();
    
    if (!evn.IsDevelopment())
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseRouting();
    app.UseAuthorization();
    app.MapRazorPages();
    }
    
  3. 整合 ABP Framework

    接下来在程序入口中需要整合 ABP Framework 。应用程序接入 ABP Framework 有两个核心步骤:

    1. 设置启动模块
    2. 调用应用程序初始化方法

    将 AppModule 设置为启动模块,在 WebApplication 运行之前调用 ABP 提供的初始化应用程序方法 app.InitializeApplicationAsync() 执行框架初始化。

    using AbpWebAppRemoteIpAddress;
    var builder = WebApplication.CreateBuilder(args);
    //设置 AppModule 为启动模块
    await builder.AddApplicationAsync<AppModule>();
    var app = builder.Build();
    //调用 ABP 提供的初始化应用程序方法
    await app.InitializeApplicationAsync();
    app.Run();
    
  4. 代码优化

    经过以上三个步骤,已经将 ABP Framework 整合到应用程序中,但是代码还有可优化的地方:

    • AbpAspNetCoreMvcModule 中已经执行了 context.Services.AddRazorPages() 服务注册,所以该行代码可以注释掉。
    • Volo.Abp.AspNetCore 程序集中提供扩展方法 app.UseConfiguredEndpoints() 在其内容完成 app.MapRazorPages() 终结点映射。

    优化后的 AppModule.cs 代码:

    public override void ConfigureServices(ServiceConfigurationContext context)
    {
    
    }
    
    public override void OnApplicationInitialization(ApplicationInitializationContext context)
    {
        var app =context.GetApplicationBuilder();
        var evn = context.GetEnvironment();
    
        if (!evn.IsDevelopment())
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }
        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseRouting();
        app.UseAuthorization();
        app.UseConfiguredEndpoints();
    }
    

至此,ASP.NET Core MVC 应用程序整合 ABP Framework 完成。


In This Document
Copyright © 2024 知识乐 湘ICP备2022022129号-1