@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 基础功能。
接下来将该空的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。
创建模块类
在项目中添加 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
时将对应的功能移入方法中。
将服务注册和中间件注册转移到模块类
改造之前,先分析下 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();
}
整合 ABP Framework
接下来在程序入口中需要整合 ABP Framework 。应用程序接入 ABP Framework 有两个核心步骤:
将 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();
代码优化
经过以上三个步骤,已经将 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 完成。