Làm thế nào bạn có thể tạo Scope của riêng bạn cho một đối tượng Scoped trong .NET?
Làm thế nào bạn có thể tạo Scope của riêng bạn cho một đối tượng Scoped trong .NET?
Để tạo Scope của riêng bạn cho một đối tượng Scoped trong .NET, bạn cần sử dụng IServiceScopeFactory
để tạo một scope mới. IServiceScopeFactory
là một dịch vụ được đăng ký tự động trong container dịch vụ của .NET và nó cho phép bạn tạo ra các scope tùy chỉnh. Dưới đây là các bước để tạo một scope mới và sử dụng một đối tượng Scoped bên trong nó:
IServiceScopeFactory
vào lớp hoặc phương thức nơi bạn muốn tạo scope mới.IServiceScopeFactory
để tạo một IServiceScope
mới.IServiceScope
mới này, bạn có thể lấy ra IServiceProvider
và sử dụng nó để lấy các dịch vụ Scoped.Dispose
trên IServiceScope
.Dưới đây là một ví dụ về cách tạo và sử dụng một scope mới:
public class MyService
{
private readonly IServiceScopeFactory _serviceScopeFactory;
public MyService(IServiceScopeFactory serviceScopeFactory)
{
_serviceScopeFactory = serviceScopeFactory;
}
public void DoWork()
{
using (var scope = _serviceScopeFactory.CreateScope())
{
var scopedService = scope.ServiceProvider.GetRequiredService<IMyScopedService>();
scopedService.PerformAction();
}
}
}
Trong ví dụ trên, IMyScopedService
là một dịch vụ được đăng ký với phạm vi Scoped trong container dịch vụ. MyService
sử dụng IServiceScopeFactory
để tạo một scope mới và lấy ra IMyScopedService
từ scope đó để thực hiện một hành động nào đó. Sau khi hành động hoàn thành, scope sẽ được giải phóng và tất cả các dịch vụ Scoped bên trong nó cũng sẽ được giải phóng[19].
Citations:
[1] https://www.t...
middle
Chưa có bình luận nào