MireaBackend/SqlData/Persistence/DependencyInjection.cs

66 lines
3.9 KiB
C#
Raw Normal View History

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Mirea.Api.DataAccess.Application.Interfaces.DbContexts.Schedule;
using Mirea.Api.DataAccess.Domain.Schedule;
using Mirea.Api.DataAccess.Persistence.Common;
using Mirea.Api.DataAccess.Persistence.Contexts.Schedule;
using Mirea.Api.DataAccess.Persistence.EntityTypeConfigurations;
using System;
using System.Linq;
using System.Reflection;
namespace Mirea.Api.DataAccess.Persistence;
public static class DependencyInjection
{
public static IServiceCollection AddPersistence(this IServiceCollection services, DatabaseProvider dbProvider, string connection)
{
services.AddDbContext<CampusDbContext>(options =>
UseDatabase(options).CreateDbContext<CampusDbContext, Campus>(dbProvider));
services.AddDbContext<DisciplineDbContext>(options =>
UseDatabase(options).CreateDbContext<DisciplineDbContext, Discipline>(dbProvider));
services.AddDbContext<FacultyDbContext>(options =>
UseDatabase(options).CreateDbContext<FacultyDbContext, Faculty>(dbProvider));
services.AddDbContext<GroupDbContext>(options =>
UseDatabase(options).CreateDbContext<GroupDbContext, Group>(dbProvider));
services.AddDbContext<LectureHallDbContext>(options =>
UseDatabase(options).CreateDbContext<LectureHallDbContext, LectureHall>(dbProvider));
services.AddDbContext<LessonAssociationDbContext>(options =>
UseDatabase(options).CreateDbContext<LessonAssociationDbContext, LessonAssociation>(dbProvider));
services.AddDbContext<ProfessorDbContext>(options =>
UseDatabase(options).CreateDbContext<ProfessorDbContext, Professor>(dbProvider));
services.AddDbContext<LessonDbContext>(options =>
UseDatabase(options).CreateDbContext<LessonDbContext, Lesson>(dbProvider));
services.AddDbContext<TypeOfOccupationDbContext>(options =>
UseDatabase(options).CreateDbContext<TypeOfOccupationDbContext, TypeOfOccupation>(dbProvider));
services.AddDbContext<SpecificWeekDbContext>(options =>
UseDatabase(options).CreateDbContext<SpecificWeekDbContext, SpecificWeek>(dbProvider));
services.AddDbContext<UberDbContext>(DbConfig);
services.AddScoped<ICampusDbContext>(provider => provider.GetRequiredService<CampusDbContext>());
services.AddScoped<IDisciplineDbContext>(provider => provider.GetRequiredService<DisciplineDbContext>());
services.AddScoped<IFacultyDbContext>(provider => provider.GetRequiredService<FacultyDbContext>());
services.AddScoped<IGroupDbContext>(provider => provider.GetRequiredService<GroupDbContext>());
services.AddScoped<ILectureHallDbContext>(provider => provider.GetRequiredService<LectureHallDbContext>());
services.AddScoped<ILessonAssociationDbContext>(provider => provider.GetRequiredService<LessonAssociationDbContext>());
services.AddScoped<IProfessorDbContext>(provider => provider.GetRequiredService<ProfessorDbContext>());
services.AddScoped<ILessonDbContext>(provider => provider.GetRequiredService<LessonDbContext>());
services.AddScoped<ITypeOfOccupationDbContext>(provider => provider.GetRequiredService<TypeOfOccupationDbContext>());
services.AddScoped<ISpecificWeekDbContext>(provider => provider.GetRequiredService<SpecificWeekDbContext>());
return services;
DbContextOptionsBuilder UseDatabase(DbContextOptionsBuilder options)
{
return dbProvider switch
{
DatabaseProvider.Sqlite => options.UseSqlite(connection),
DatabaseProvider.Mysql => options.UseMySql(connection, ServerVersion.AutoDetect(connection)),
DatabaseProvider.Postgresql => options.UseNpgsql(connection),
_ => throw new ArgumentException("Unsupported database provider", Enum.GetName(dbProvider))
};
}
}
}