I. Giới thiệu về ABP vNext
ABP vNext là một khung ứng dụng Web dựa trên Asp.Net Core, được thiết kế để phát triển nhanh chóng các ứng dụng Web. Khung này không chỉ cung cấp mẫu ứng dụng hoàn chỉnh mà còn tích hợp các chức năng cơ sở cần thiết cho phát triển Web.II. Khái niệm về Mô Đun
Từ góc nhìn lập trình hướng đối tượng, mô đun có thể được hiểu là sự trừu tượng hóa của các thành phần và chức năng kinh doanh. Trong hệ thống OA, bạn có thể chia nhỏ thành các mô đun như quản lý chấm công, xin nghỉ phép, quản lý nhân sự... Mỗi mô đun hoạt động độc lập nhưng kết nối với nhau để tạo thành ứng dụng hoàn chỉnh, giúp bảo trì dễ dàng và tăng tốc độ phát triển.III. Sử dụng Mô Đun trong ABP
Môi trường: VS2019 và .NET 5
1. Ứng dụng Console
- Tạo dự án console mới
- Thêm gói NuGet Volo.Abp.Core
- Tạo lớp mô đun kế thừa từ AbpModule:
public class ConsoleAppModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Console.WriteLine("Khởi tạo mô đun ConsoleAppModule");
context.Services.AddHostedService<ConsoleBackgroundService>();
}
}
- Cấu hình lớp khởi tạo:
static void Main(string[] args)
{
CreateHostBuilder(args).RunConsoleAsync().Wait();
}
internal static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddApplication<ConsoleAppModule>();
});
2. Ứng dụng Web
- Tạo dự án Web mới
- Thêm gói NuGet Volo.Abp.Core
- Tạo lớp WebModule:
public class WebAppModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context){}
public override void OnApplicationInitialization(ApplicationInitializationContext context){}
}
- Chỉnh sửa lớp Startup:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddApplication<WebAppModule>();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.InitializeApplication();
}
}
- Di chuyển cấu hình sang WebModule:
public class WebAppModule : 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();
}
}
IV. Quản lý Phụ Thuộc Mô Đun
1. Tạo Mô Đun Tùy chỉnh
public class SharedModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Console.WriteLine("Khởi tạo mô đun chia sẻ");
}
}
2. Cấu hình Phụ Thuộc
[DependsOn(typeof(SharedModule))]
public class AppModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Console.WriteLine("Mô đun chính");
}
}
public class SharedModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Console.WriteLine("Mô đun phụ");
}
}
3. Đăng ký Dịch Vụ
- Cách 1: Đăng ký trực tiếp trong ConfigureServices
public class SharedModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddTransient<SharedService>();
}
}
- Cách 2: Sử dụng giao diện ràng buộc
public class SharedService : ITransientDependency
{
public void Execute()
{
Console.WriteLine("Chạy dịch vụ");
}
}
- Cách 3: Sử dụng đặc tính đánh dấu
[Dependency(ServiceLifetime.Transient)]
public class SharedService
{
public void Execute()
{
Console.WriteLine("Chạy dịch vụ");
}
}
V. Tải Mô Đun Mở Rộng
Để thêm chức năng mở rộng không yêu cầu tham chiếu cứng, thực hiện:
- Tạo dự án plugin Common.Plugin
- Tạo thư mục Plugins
- Sao chép Common.Plugin.dll vào thư mục Plugins
- Thiết lập trong ứng dụng:
services.AddApplication<AppModule>(options =>
{
options.PlugInSources.AddFolder(@"\Plugins");
});
VI. Sử dụng ABP CLI
1. Cài đặt và Cập nhật
dotnet tool install -g Volo.Abp.Cli
dotnet tool update -g Volo.Abp.Cli
2. Tạo Dự án
abp new WebProject -o
abp new WebApi --dbms mysql -u none -o -v 4.4.3
abp new ConsoleApp -t console -o