Внедрить фабрики объектов вместо прямого new

Создание сервисов с порт-интерфейсом перенесено в IXxxFactory:
шифр секретов, хранилище лимитов, ИИ-классификатор, ИИ-инструменты,
файловое хранилище (Local/MinIO). Регистраторы и DiscoveryWorkerService
больше не создают реализации напрямую. Добавлен тест FileStorageFactory.
This commit is contained in:
2026-09-13 03:41:39 +03:00
parent b58ac08717
commit d172b6408b
17 changed files with 350 additions and 32 deletions
@@ -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);
}