Веб-API ASP.NET Core 8: невозможно зарегистрировать службу с ограниченной областью из синглтонаC#

Место общения программистов C#
Anonymous
Веб-API ASP.NET Core 8: невозможно зарегистрировать службу с ограниченной областью из синглтона

Сообщение Anonymous »

В моем API я регистрирую некоторые службы с помощью AddHostedService, которым необходимо внедрить в них некоторые интерфейсы, например:

Код: Выделить всё

Program.cs:

Код: Выделить всё

builder.Services.AddScoped();
builder.Services.AddScoped();
builder.Services.AddScoped();
builder.Services.AddScoped();

builder.Services.AddScoped();
builder.Services.AddScoped();
builder.Services.AddScoped();

builder.Services.AddHostedService();

Код: Выделить всё

CheckDatabaseHealthBackgroundService.cs:

Код: Выделить всё

public sealed class CheckDatabaseHealthBackgroundService : BackgroundService, IDisposable
{
private readonly IServiceProvider _provider;
private readonly IJobUtility _jobUtility;
private readonly IVdcUnitOfWork _unitOfWork;
private readonly ICloudStackCoreConnectionFactory _connFactory;
private readonly IMemoryCache _cache;
private readonly ILogger _logger;

public CheckDatabaseHealthBackgroundService(
IServiceProvider provider,
IJobUtility jobUtility,
IVdcUnitOfWork unitOfWork,
ICloudStackCoreConnectionFactory connFactory,
IMemoryCache cache,
ILogger logger)
{
_provider = provider;
_jobUtility = jobUtility;
_unitOfWork = unitOfWork;
_connFactory = connFactory;
_cache = cache;
_logger = logger;
}
но после запуска API выдается следующее исключение:

System.InvalidOperationException: ошибка при проверке службы дескриптор «ServiceType: Microsoft.Extensions.Hosting.IHostedService Срок службы: Singleton ImplementationType: CloudStackData.WebAPI.RefreshDiskTypeBackgroundService»: невозможно использовать ограниченную службу «Vdc.Libs.Data.IVdcUnitOfWork» из одноэлементного «Microsoft.Extensions.Hosting.IHostedService».
System.InvalidOperationException: невозможно использовать службу с ограниченной областью действия «Vdc.Libs.Data.IVdcUnitOfWork» из одноэлементного «Microsoft.Extensions.Hosting.IHostedService»
Прочитав об этой ошибке, я пришел к выводу, что мне следует добавить необходимые службы CheckDatabaseHealthBackgroundService как одноэлементные, без ограниченной области, и поэтому я попробовал:

Код: Выделить всё

Program.cs:

Код: Выделить всё

builder.Services.AddScoped();
builder.Services.AddScoped();
builder.Services.AddScoped();
builder.Services.AddScoped();

builder.Services.AddSingleton();
builder.Services.AddSingleton();
builder.Services.AddSingleton();

builder.Services.AddHostedService();
И теперь выдается исключение:

System.InvalidOperationException: ошибка при проверке дескриптора службы 'ServiceType: Microsoft .Extensions.Hosting.IHostedService Время жизни: Singleton ImplementationType: CloudStackData.WebAPI.RefreshDiskTypeBackgroundService': невозможно использовать ограниченную службу "Vdc.Libs.Data.DbContextWrite" из одноэлементного "Vdc.Libs.Data.IVdcUnitOfWork".

И тут я начал застревать.

Код: Выделить всё

VdcUnitOfWork
— это созданный нами специальный класс:

Код: Выделить всё

public sealed class VdcUnitOfWork : EFDbUnitOfWork, IVdcUnitOfWork, IUnitOfWork, IDisposable, IDbContextWrapper
{
public VdcUnitOfWork(DbContextWrite dbContext)
: base(dbContext)
{
}
}
И DbContextWrite — еще один пользовательский класс:

Код: Выделить всё

public abstract class DbContextWrite : DbContext
{
protected DbContextWrite([NotNull] DbContextOptions options)
: base(options)
{
}
}
Дело в том, что после добавления размещенной службы с помощью AddHostedService я больше не могу запускать API (у меня четыре размещенных службы, но для упрощения я просто поставил одну).< /p>
Помощь?

Подробнее здесь: https://stackoverflow.com/questions/786 ... -singleton

Вернуться в «C#»