Refactor DIExtensions.AddUserManager to Use Generic TDbContext for Improved Flexibility.

This commit is contained in:
Developer 02 2024-06-13 13:44:51 +02:00
parent 8faed31baa
commit 43c98f9454
9 changed files with 39 additions and 30 deletions

View File

@ -38,6 +38,10 @@ try {
options.LogoutPath = "/api/auth/logout";
});
builder.Services.AddDbContext<UserManagerDbContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("DD_ECM_Connection"))
.EnableDetailedErrors());
var allowedOrigins = builder.Configuration.GetSection("AllowedOrigins").Get<string[]>() ?? throw new InvalidOperationException("In appsettings there is no allowed origin.");
builder.Services.AddCors(options =>
@ -53,9 +57,7 @@ try {
});
//builder.Services.AddAutoMapper(typeof(DirectoryMappingProfile).Assembly);
builder.Services.AddUserManager(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("DD_ECM_Connection"))
.EnableDetailedErrors());
builder.Services.AddUserManager<UserManagerDbContext>();
builder.Services.AddDirectorySearchService();

View File

@ -11,15 +11,15 @@ namespace DigitalData.UserManager.Application
public static class DIExtensions
{
/// <summary>
/// Extension method to configure dependency injection for the UserManager application.
/// Adds the UserManager services and repositories to the specified <see cref="IServiceCollection"/>.
/// This method registers the necessary mappings, repositories, and services for the UserManager.
/// </summary>
/// <remarks>
/// This method registers AutoMapper profiles, repositories, and services for the UserManager application.
/// </remarks>
/// <param name="services">The IServiceCollection to add services to.</param>
/// <typeparam name="TDbContext">The type of the DbContext to use for the repositories.</typeparam>
/// <param name="services">The IServiceCollection to which the services will be added.</param>
/// <returns>The updated IServiceCollection.</returns>
public static IServiceCollection AddUserManager(this IServiceCollection services, Action<DbContextOptionsBuilder>? optionsAction) => services
.AddDbContext<UserManagerDbContext>(optionsAction: optionsAction)
public static IServiceCollection AddUserManager<TDbContext>(this IServiceCollection services)
where TDbContext : DbContext
=> services
.AddAutoMapper(typeof(UserMappingProfile).Assembly)
.AddAutoMapper(typeof(GroupMappingProfile).Assembly)
.AddAutoMapper(typeof(GroupOfUserMappingProfile).Assembly)
@ -27,12 +27,12 @@ namespace DigitalData.UserManager.Application
.AddAutoMapper(typeof(ModuleOfUserMappingProfile).Assembly)
.AddAutoMapper(typeof(UserRepMappingProfile).Assembly)
.AddScoped<IUserRepository, UserRepository>()
.AddScoped<IGroupRepository, GroupRepository>()
.AddScoped<IGroupOfUserRepository, GroupOfUserRepository>()
.AddScoped<IModuleRepository, ModuleRepository>()
.AddScoped<IModuleOfUserRepository, ModuleOfUserRepository>()
.AddScoped<IUserRepRepository, UserRepRepository>()
.AddScoped<IUserRepository, UserRepository<TDbContext>>()
.AddScoped<IGroupRepository, GroupRepository<TDbContext>>()
.AddScoped<IGroupOfUserRepository, GroupOfUserRepository<TDbContext>>()
.AddScoped<IModuleRepository, ModuleRepository<TDbContext>>()
.AddScoped<IModuleOfUserRepository, ModuleOfUserRepository<TDbContext>>()
.AddScoped<IUserRepRepository, UserRepRepository<TDbContext>>()
.AddScoped<IUserService, UserService>()
.AddScoped<IGroupService, GroupService>()

View File

@ -5,9 +5,10 @@ using Microsoft.EntityFrameworkCore;
namespace DigitalData.UserManager.Infrastructure.Repositories
{
public class GroupOfUserRepository : CRUDRepository<GroupOfUser, int, UserManagerDbContext>, IGroupOfUserRepository
public class GroupOfUserRepository<TDbContext> : CRUDRepository<GroupOfUser, int, TDbContext>, IGroupOfUserRepository
where TDbContext : DbContext
{
public GroupOfUserRepository(UserManagerDbContext dbContext) : base(dbContext)
public GroupOfUserRepository(TDbContext dbContext) : base(dbContext)
{
}

View File

@ -1,12 +1,14 @@
using DigitalData.Core.Infrastructure;
using DigitalData.UserManager.Domain.Entities;
using DigitalData.UserManager.Infrastructure.Contracts;
using Microsoft.EntityFrameworkCore;
namespace DigitalData.UserManager.Infrastructure.Repositories
{
public class GroupRepository : CRUDRepository<Group, int, UserManagerDbContext>, IGroupRepository
public class GroupRepository<TDbContext> : CRUDRepository<Group, int, TDbContext>, IGroupRepository
where TDbContext : DbContext
{
public GroupRepository(UserManagerDbContext dbContext) : base(dbContext)
public GroupRepository(TDbContext dbContext) : base(dbContext)
{
}
}

View File

@ -5,9 +5,10 @@ using Microsoft.EntityFrameworkCore;
namespace DigitalData.UserManager.Infrastructure.Repositories
{
public class ModuleOfUserRepository : CRUDRepository<ModuleOfUser, int, UserManagerDbContext>, IModuleOfUserRepository
public class ModuleOfUserRepository<TDbContext> : CRUDRepository<ModuleOfUser, int, TDbContext>, IModuleOfUserRepository
where TDbContext : DbContext
{
public ModuleOfUserRepository(UserManagerDbContext dbContext) : base(dbContext)
public ModuleOfUserRepository(TDbContext dbContext) : base(dbContext)
{
}

View File

@ -1,12 +1,14 @@
using DigitalData.Core.Infrastructure;
using DigitalData.UserManager.Domain.Entities;
using DigitalData.UserManager.Infrastructure.Contracts;
using Microsoft.EntityFrameworkCore;
namespace DigitalData.UserManager.Infrastructure.Repositories
{
public class ModuleRepository : CRUDRepository<Module, int, UserManagerDbContext>, IModuleRepository
public class ModuleRepository<TDbContext> : CRUDRepository<Module, int, TDbContext>, IModuleRepository
where TDbContext : DbContext
{
public ModuleRepository(UserManagerDbContext dbContext) : base(dbContext)
public ModuleRepository(TDbContext dbContext) : base(dbContext)
{
}
}

View File

@ -5,9 +5,10 @@ using Microsoft.EntityFrameworkCore;
namespace DigitalData.UserManager.Infrastructure.Repositories
{
public class UserRepRepository : CRUDRepository<UserRep, int, UserManagerDbContext>, IUserRepRepository
public class UserRepRepository<TDbContext> : CRUDRepository<UserRep, int, TDbContext>, IUserRepRepository
where TDbContext : DbContext
{
public UserRepRepository(UserManagerDbContext dbContext) : base(dbContext)
public UserRepRepository(TDbContext dbContext) : base(dbContext)
{
}

View File

@ -5,11 +5,12 @@ using Microsoft.EntityFrameworkCore;
namespace DigitalData.UserManager.Infrastructure.Repositories
{
public class UserRepository : CRUDRepository<User, int, UserManagerDbContext>, IUserRepository
public class UserRepository<TDbContext> : CRUDRepository<User, int, TDbContext>, IUserRepository
where TDbContext : DbContext
{
private IModuleOfUserRepository _moduleOfUserRepo;
private IGroupOfUserRepository _groupOfUserRepo;
public UserRepository(UserManagerDbContext dbContext, IModuleOfUserRepository moduleOfUserRepo, IGroupOfUserRepository groupOfUserRepo) : base(dbContext)
public UserRepository(TDbContext dbContext, IModuleOfUserRepository moduleOfUserRepo, IGroupOfUserRepository groupOfUserRepo) : base(dbContext)
{
_moduleOfUserRepo = moduleOfUserRepo;
_groupOfUserRepo = groupOfUserRepo;

View File

@ -1,5 +1,4 @@
using DigitalData.UserManager.Domain.Entities;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
namespace DigitalData.UserManager.Infrastructure.Repositories
{