From e2853b64d12f75f69ad3d64d3b9cf33f65e520ac Mon Sep 17 00:00:00 2001 From: TekH Date: Fri, 12 Sep 2025 11:35:40 +0200 Subject: [PATCH] refactor(repository): replace queryFactory with DbSetFactory in DbRepository - Updated DbRepository constructor to use DbSetFactory instead of a Func> queryFactory. - Adjusted namespace imports to include DigitalData.Core.Infrastructure.Factory. - Improved repository instantiation consistency and encapsulation. --- DigitalData.Core.Infrastructure/DbRepository.cs | 5 +++-- .../DependencyInjection.cs | 12 ++++++------ .../Infrastructure/DbRepositoryTests.cs | 6 +++--- DigitalData.Core.Tests/Mock/User.cs | 2 ++ 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/DigitalData.Core.Infrastructure/DbRepository.cs b/DigitalData.Core.Infrastructure/DbRepository.cs index 9604962..679e5b1 100644 --- a/DigitalData.Core.Infrastructure/DbRepository.cs +++ b/DigitalData.Core.Infrastructure/DbRepository.cs @@ -1,5 +1,6 @@ using AutoMapper; using DigitalData.Core.Abstraction.Application.Repository; +using DigitalData.Core.Infrastructure.Factory; using Microsoft.EntityFrameworkCore; using System.Linq.Expressions; @@ -13,10 +14,10 @@ public class DbRepository : IRepository where TDbC public IMapper Mapper { get; } - public DbRepository(TDbContext context, Func> queryFactory, IMapper mapper) + public DbRepository(TDbContext context, DbSetFactory factory, IMapper mapper) { Context = context; - Entities = queryFactory(context); + Entities = factory.Create(context); Mapper = mapper; } diff --git a/DigitalData.Core.Infrastructure/DependencyInjection.cs b/DigitalData.Core.Infrastructure/DependencyInjection.cs index 45f50bf..e3ab1c6 100644 --- a/DigitalData.Core.Infrastructure/DependencyInjection.cs +++ b/DigitalData.Core.Infrastructure/DependencyInjection.cs @@ -44,7 +44,7 @@ public static class DependencyInjection // 2. register entities (can overwrite) RegsEntity.InvokeAll(services); - // 1. register db set factories (can overwrite) + // 3. register db set factories (can overwrite) RegsDbSetFactory.InvokeAll(services); } @@ -77,7 +77,7 @@ public static class DependencyInjection BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public); var genericMethod = addDbSetFactoryMethod!.MakeGenericMethod(typeof(TDbContext), entityType); - genericMethod.Invoke(null, new [] { services }); + genericMethod.Invoke(null, new [] { services, null }); #endregion DbSetFactory } } @@ -85,7 +85,7 @@ public static class DependencyInjection RegsFromAssembly.Enqueue(reg); } - public void RegisterEntity(Func>? dbSetFactory = null) + public void RegisterEntity(Func>? dbSetFactory = null) where TDbContext : DbContext where TEntity : class { @@ -99,7 +99,7 @@ public static class DependencyInjection public void RegisterDbSetFactory(Func> dbSetFactory) where TDbContext : DbContext - where TEntity : class + where TEntity : class => RegsDbSetFactory.Enqueue(s => s.AddDbSetFactory(dbSetFactory)); } @@ -109,8 +109,8 @@ public static class DependencyInjection queue.Dequeue().Invoke(services); } - internal static IServiceCollection AddDbSetFactory(this IServiceCollection services, Func>? create = null) - where TDbContext : DbContext + internal static IServiceCollection AddDbSetFactory(this IServiceCollection services, Func>? create = null) + where TDbContext : DbContext where TEntity : class { create ??= ctx => ctx.Set(); diff --git a/DigitalData.Core.Tests/Infrastructure/DbRepositoryTests.cs b/DigitalData.Core.Tests/Infrastructure/DbRepositoryTests.cs index 0bf2760..37caafb 100644 --- a/DigitalData.Core.Tests/Infrastructure/DbRepositoryTests.cs +++ b/DigitalData.Core.Tests/Infrastructure/DbRepositoryTests.cs @@ -1,6 +1,4 @@ -namespace DigitalData.Core.Tests.Infrastructure; - -using DigitalData.Core.Tests.Mock; +using DigitalData.Core.Tests.Mock; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; @@ -8,6 +6,8 @@ using System.Reflection; using DigitalData.Core.Abstraction.Application.Repository; using DigitalData.Core.Infrastructure; +namespace DigitalData.Core.Tests.Infrastructure; + public class DbRepositoryTests { private IHost _host; diff --git a/DigitalData.Core.Tests/Mock/User.cs b/DigitalData.Core.Tests/Mock/User.cs index 86e906b..cb65892 100644 --- a/DigitalData.Core.Tests/Mock/User.cs +++ b/DigitalData.Core.Tests/Mock/User.cs @@ -1,7 +1,9 @@ using DigitalData.Core.Abstraction.Application.Repository; +using System.ComponentModel.DataAnnotations.Schema; namespace DigitalData.Core.Tests.Mock; +[Table("USER")] public class User : UserBase, IEntity { public required int Id { get; init; }