Внедрить фабрики объектов вместо прямого new
Создание сервисов с порт-интерфейсом перенесено в IXxxFactory: шифр секретов, хранилище лимитов, ИИ-классификатор, ИИ-инструменты, файловое хранилище (Local/MinIO). Регистраторы и DiscoveryWorkerService больше не создают реализации напрямую. Добавлен тест FileStorageFactory.
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
using Deal.Modules.Tenants.Application.Abstractions;
|
||||
|
||||
namespace Deal.Infrastructure.Persistence.Abstractions;
|
||||
|
||||
/// <summary>
|
||||
/// Фабрика хранилища лимитов ИИ-бюджета
|
||||
/// </summary>
|
||||
public interface ITenantLimitStoreFactory
|
||||
{
|
||||
/// <summary>
|
||||
/// Создаёт хранилище лимитов
|
||||
/// </summary>
|
||||
/// <returns>Готовый порт лимитов тенанта.</returns>
|
||||
public ITenantLimitStore Create();
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
using Deal.Infrastructure.Persistence.Abstractions;
|
||||
using Deal.Infrastructure.Persistence.Repositories;
|
||||
using Deal.Modules.Tenants.Application.Abstractions;
|
||||
using Deal.Modules.Tenants.Application.Models;
|
||||
|
||||
namespace Deal.Infrastructure.Persistence.Services;
|
||||
|
||||
/// <summary>
|
||||
/// Фабрика EF-адаптера хранилища лимитов с дефолт-бюджетом из конфигурации
|
||||
/// </summary>
|
||||
public sealed class TenantLimitStoreFactory : ITenantLimitStoreFactory
|
||||
{
|
||||
private readonly DealDbContext _dbContext;
|
||||
private readonly TokenLimitDefaults _defaults;
|
||||
|
||||
/// <summary>
|
||||
/// Создаёт фабрику хранилища лимитов
|
||||
/// </summary>
|
||||
/// <param name="dbContext">Системный контекст (public-схема).</param>
|
||||
/// <param name="defaults">Дефолт-параметры лениво создаваемой строки.</param>
|
||||
public TenantLimitStoreFactory(DealDbContext dbContext, TokenLimitDefaults defaults)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(dbContext);
|
||||
ArgumentNullException.ThrowIfNull(defaults);
|
||||
_dbContext = dbContext;
|
||||
_defaults = defaults;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public ITenantLimitStore Create() => new TenantLimitStore(_dbContext, _defaults);
|
||||
}
|
||||
Reference in New Issue
Block a user