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ánAddMemoryCache- Cache trong bộ nhớ cục bộAddResponseCaching- Cache response HTTP
Cấu hình MVC và API
AddControllers- Đăng ký controllers cho APIAddControllersWithViews- Controllers với view (MVC)AddMvcCore- Cấu hình MVC cơ bảnAddRazorPages- Hỗ trợ Razor Pages
SignalR và thời gian thực
AddSignalR- Dịch vụ real-timeAddSignalRCore- SignalR core
Cấu hình khác
AddCors- Cross-Origin Resource SharingAddDataProtection- Bảo vệ dữ liệuAddHealthChecks- Kiểm tra sức khỏe ứng dụngAddLocalization- 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ầuAddScoped- Tạo mới mỗi requestAddSingleton- 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.