using Blueprint.Core.Entities; using Blueprint.Core.Interfaces.SPI; using Template.Core.Interfaces.SPI; using Template.Infra.Services; namespace Blueprint.Infra.Services { public class RepositoryFactory : IRepositoryFactory where T : BaseEntity { private readonly string _databaseType; private readonly IServiceProvider _serviceProvider; public RepositoryFactory(IConfiguration configuration, IServiceProvider serviceProvider) { _databaseType = configuration["Database:Type"]!; _serviceProvider = serviceProvider; } public IItemInfra CreateItemRepository() { return _databaseType.ToLower() switch { "mysql" => ActivatorUtilities.CreateInstance>(_serviceProvider), "mongodb" => ActivatorUtilities.CreateInstance>(_serviceProvider), _ => throw new ArgumentException("Invalid database type") }; } public IUserInfra CreateUserRepository() { return _databaseType.ToLower() switch { "mysql" => ActivatorUtilities.CreateInstance(_serviceProvider), "mongodb" => ActivatorUtilities.CreateInstance(_serviceProvider), _ => throw new ArgumentException("Invalid database type") }; } } }