ABP vNext - Các Mô Đun

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

  1. Tạo dự án console mới
  2. Thêm gói NuGet Volo.Abp.Core
  3. 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>();
    }
}
  1. 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

  1. Tạo dự án Web mới
  2. Thêm gói NuGet Volo.Abp.Core
  3. Tạo lớp WebModule:
public class WebAppModule : AbpModule
{ 
    public override void ConfigureServices(ServiceConfigurationContext context){}
    public override void OnApplicationInitialization(ApplicationInitializationContext context){}
}
  1. 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();
    }
}
  1. 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:

  1. Tạo dự án plugin Common.Plugin
  2. Tạo thư mục Plugins
  3. Sao chép Common.Plugin.dll vào thư mục Plugins
  4. 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

Thẻ: ABP vNext ASP.NET Core mô đun Dependency Injection plugin system

Đăng vào ngày 29 tháng 6 lúc 12:38