using FJPSite.Attributes; using FJPSite.Data; using FJPSite.Extensions; using FJPSite.Interfaces; using Microsoft.AspNetCore.Identity; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using System.Reflection; namespace FJPSite.Factories; public static class DbSeederFactory { public static void SeedDatabase(ApplicationDbContext context) { //TODO: Code works, just not sure if want to auto load/inject due to some needing to be done in a specific order. var serviceDescriptors = typeof(Program).Assembly//.GetTypes().Where(type => type is {IsAbstract: false, IsInterface: false } && type.IsAssignableFrom(typeof(IEntitySeederFactory))).OrderBy(o => o.GetCustomAttribute().Order) .DefinedTypes .Where(type => type is { IsAbstract: false, IsInterface: false } && type.IsAssignableTo(typeof(IEntitySeederFactory))).OrderBy(o => o.GetCustomAttribute().Migration) .ToArray(); // foreach (var serviceDescriptor in serviceDescriptors) { if (context.MigrationApplied(serviceDescriptor.GetCustomAttribute().Migration)) { IEntitySeederFactory entitySeederFactory = Activator.CreateInstance(serviceDescriptor) as IEntitySeederFactory; entitySeederFactory.Seed(context); } } /*Reflection IdentitySeederFactory identitySeeder = new IdentitySeederFactory(); identitySeeder.Seed(context); PermissionSeederFactory permissionSeeder = new PermissionSeederFactory(); permissionSeeder.Seed(context);*/ } }