using Microsoft.EntityFrameworkCore; using System.Linq; namespace Mirea.Api.DataAccess.Persistence.Common; public static class ModelBuilderExtensions { public static void ApplyConfiguration(this ModelBuilder modelBuilder, object configuration) { var applyGenericMethod = typeof(ModelBuilder) .GetMethods() .First(m => m.Name == "ApplyConfiguration" && m.GetParameters().Any(p => p.ParameterType.GetGenericTypeDefinition() == typeof(IEntityTypeConfiguration<>))); var entityType = configuration.GetType().GetInterfaces() .First(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IEntityTypeConfiguration<>)) .GetGenericArguments()[0]; var applyConcreteMethod = applyGenericMethod.MakeGenericMethod(entityType); applyConcreteMethod.Invoke(modelBuilder, [configuration]); } }