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

View File

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

View File

@ -5,9 +5,10 @@ using Microsoft.EntityFrameworkCore;
namespace DigitalData.UserManager.Infrastructure.Repositories 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.Core.Infrastructure;
using DigitalData.UserManager.Domain.Entities; using DigitalData.UserManager.Domain.Entities;
using DigitalData.UserManager.Infrastructure.Contracts; using DigitalData.UserManager.Infrastructure.Contracts;
using Microsoft.EntityFrameworkCore;
namespace DigitalData.UserManager.Infrastructure.Repositories 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 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.Core.Infrastructure;
using DigitalData.UserManager.Domain.Entities; using DigitalData.UserManager.Domain.Entities;
using DigitalData.UserManager.Infrastructure.Contracts; using DigitalData.UserManager.Infrastructure.Contracts;
using Microsoft.EntityFrameworkCore;
namespace DigitalData.UserManager.Infrastructure.Repositories 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 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 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 IModuleOfUserRepository _moduleOfUserRepo;
private IGroupOfUserRepository _groupOfUserRepo; 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; _moduleOfUserRepo = moduleOfUserRepo;
_groupOfUserRepo = groupOfUserRepo; _groupOfUserRepo = groupOfUserRepo;

View File

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