Các phương thức mở rộng của IServiceCollection trong .NET Core

Giới thiệu về IServiceCollection

Trong .NET Core và ASP.NET Core, IServiceCollection là một container chứa tất cả các dịch vụ (services) của ứng dụng. Framework cung cấp nhiều phương thức mở rộng (extension methods) giúp cấu hình các dịch vụ một cách dễ dàng và nhanh chóng.

Các phương thức mở rộng phổ biến

1. Xác thực và bảo mật

AddAntiforgery - Bảo vệ CSRF

Phương thức này cấu hình dịch vụ chống giả mạo request (CSRF):

services.AddAntiforgery(options =>
{
    options.Cookie.Name = "XSRF-TOKEN";
    options.FormFieldName = "__RequestVerificationToken";
});

AddAuthentication - Cấu hình xác thực

Đây là phương thức quan trọng để thiết lập hệ thống xác thực. Nó trả về một AuthenticationBuilder cho phép thêm các scheme xác thực:

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidateAudience = true,
            ValidateLifetime = true,
            ValidateIssuerSigningKey = true,
            ValidIssuer = "issuer.example.com",
            ValidAudience = "audience.example.com"
        };
    });

Phương thức AddAuthenticationCore đăng ký các dịch vụ cốt lõi cần thiết cho xác thực:

public static IServiceCollection AddAuthenticationCore(this IServiceCollection services)
{
    ArgumentNullException.ThrowIfNull(services);

    services.TryAddScoped<IAuthenticationService, AuthenticationService>();
    services.TryAddSingleton<IClaimsTransformation, DefaultClaimsTransformation>();
    services.TryAddScoped<IAuthenticationHandlerProvider, DefaultAuthenticationHandlerProvider>();
    services.TryAddSingleton<IAuthenticationSchemeProvider, DefaultAuthenticationSchemeProvider>;
    
    return services;
}

AddAuthorization - Cấu hình ủy quyền

Đăng ký dịch vụ ủy quyền để kiểm tra quyền truy cập tài nguyên:

services.AddAuthorization(options =>
{
    options.AddPolicy("AdminOnly", policy => 
        policy.RequireRole("Administrator"));
    
    options.AddPolicy("RequireEmail", policy =>
        policy.RequireClaim(ClaimTypes.Email));
});

2. Các dịch vụ phổ biến khác

Quản lý bộ nhớ cache

  • AddDistributedMemoryCache - Sử dụng bộ nhớ phân tán
  • AddMemoryCache - Cache trong bộ nhớ cục bộ
  • AddResponseCaching - Cache response HTTP

Cấu hình MVC và API

  • AddControllers - Đăng ký controllers cho API
  • AddControllersWithViews - Controllers với view (MVC)
  • AddMvcCore - Cấu hình MVC cơ bản
  • AddRazorPages - Hỗ trợ Razor Pages

SignalR và thời gian thực

  • AddSignalR - Dịch vụ real-time
  • AddSignalRCore - SignalR core

Cấu hình khác

  • AddCors - Cross-Origin Resource Sharing
  • AddDataProtection - Bảo vệ dữ liệu
  • AddHealthChecks - Kiểm tra sức khỏe ứng dụng
  • AddLocalization - Hỗ trợ đa ngôn ngữ
  • AddSwaggerGen - Tạo tài liệu API

3. Đăng ký thời gian sống của Service

IServiceCollection cung cấp ba phương thức để đăng ký service với các thời gian sống khác nhau:

  • AddTransient - Tạo mới mỗi lần được yêu cầu
  • AddScoped - Tạo mới mỗi request
  • AddSingleton - Tạo một lần và tái sử dụng
// Ví dụ đăng ký các service
services.AddTransient<ITransientService, TransientService>();
services.AddScoped<IScopedService, ScopedService>();
services.AddSingleton<ISingletonService, SingletonService>();

4. Background Services

Đăng ký các dịch vụ chạy nền:

services.AddHostedService<BackgroundTaskService>();

Hoặc đăng ký một singleton dưới dạng background service:

services.AddSingleton<IBackgroundTaskQueue, BackgroundTaskQueue>();
services.AddHostedService<QueuedHostedService>();

Kết luận

IServiceCollection cung cấp rất nhiều phương thức mở rộng giúp việc cấu hình ứng dụng .NET Core trở nên đơn giản và trực quan. Việc hiểu rõ công dụng của từng phương thức giúp developers xây dựng ứng dụng hiệu quả và bảo mật hơn.

Thẻ: aspnetcore dotnetcore dependency-injection iservicecollection csharp

Đăng vào ngày 31 tháng 5 lúc 23:24