دسترسی به سرویس scoped در سرویس singleton در دات نت

mohsen11 ماه قبل11 ماه قبل
ارسال شده در
mohsen

فرض کنید که ما یک ورکر سرویس درست کردیم و می خواهیم سرویسی که به صورت scoped رجیستر شده است را به کلاس Worker که singleton است تزریق کنیم. خطای زیر را دریافت می کنیم:

      Some services are not able to be constructed 
(Error while validating the service descriptor 'ServiceType: 
Microsoft.Extensions.Hosting.IHostedService Lifetime: 
Singleton ImplementationType: Test.Worker': Cannot consume scoped service 'Test.
CustomDbContext' from singleton 'Microsoft.Extensions.Hosting.IHostedService'.)
    

راه حل اینه که ما به جای تزریق مستقیم سرویس به کلاس Worker، سرویس IServiceProvider را تزریق کنیم و جایی که نیازمند استفاده از سرویس scoped هستیم، آن را بوسیله کد زیر ایجاد کنیم:

      using var scope = _serviceProvider.CreateScope();
var dbContext = scope.ServiceProvider.GetRequiredService<CustomDbContext>();
    
رای
0
ارسال نظر
مرتب سازی:
اولین نفری باشید که نظر می دهید!