用于生成初始数据的提供程序
This commit is contained in:
parent
14b419dbf7
commit
878caabb95
@ -0,0 +1,27 @@
|
|||||||
|
using HelloShop.IdentityService.Entities;
|
||||||
|
using HelloShop.IdentityService.EntityFrameworks;
|
||||||
|
using HelloShop.ServiceDefaults.Infrastructure;
|
||||||
|
|
||||||
|
namespace HelloShop.IdentityService.DataSeeding
|
||||||
|
{
|
||||||
|
public class User2DataSeedingProvider : IDataSeedingProvider
|
||||||
|
{
|
||||||
|
public async Task SeedingAsync(IServiceProvider serviceProvider)
|
||||||
|
{
|
||||||
|
var dbContext = serviceProvider.GetRequiredService<IdentityServiceDbContext>();
|
||||||
|
|
||||||
|
var guestUser = dbContext.Set<User>().SingleOrDefault(x => x.UserName == "guest2");
|
||||||
|
|
||||||
|
if (guestUser is null)
|
||||||
|
{
|
||||||
|
await dbContext.Set<User>().AddAsync(new User
|
||||||
|
{
|
||||||
|
UserName = "guest2",
|
||||||
|
PasswordHash = "AQAAAAEAACcQAAAAEJ"
|
||||||
|
});
|
||||||
|
|
||||||
|
await dbContext.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
using HelloShop.IdentityService.Entities;
|
||||||
|
using HelloShop.IdentityService.EntityFrameworks;
|
||||||
|
using HelloShop.ServiceDefaults.Infrastructure;
|
||||||
|
|
||||||
|
namespace HelloShop.IdentityService.DataSeeding
|
||||||
|
{
|
||||||
|
public class UserDataSeedingProvider(IdentityServiceDbContext dbContext) : IDataSeedingProvider
|
||||||
|
{
|
||||||
|
public async Task SeedingAsync(IServiceProvider serviceProvider)
|
||||||
|
{
|
||||||
|
var guestUser = dbContext.Set<User>().SingleOrDefault(x => x.UserName == "guest");
|
||||||
|
|
||||||
|
if (guestUser is null)
|
||||||
|
{
|
||||||
|
await dbContext.Set<User>().AddAsync(new User
|
||||||
|
{
|
||||||
|
UserName = "guest",
|
||||||
|
PasswordHash = "AQAAAAEAACcQAAAAEJ"
|
||||||
|
});
|
||||||
|
|
||||||
|
await dbContext.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,5 +1,7 @@
|
|||||||
using HelloShop.IdentityService.Constants;
|
using HelloShop.IdentityService.Constants;
|
||||||
|
using HelloShop.IdentityService.DataSeeding;
|
||||||
using HelloShop.IdentityService.EntityFrameworks;
|
using HelloShop.IdentityService.EntityFrameworks;
|
||||||
|
using HelloShop.ServiceDefaults.Extensions;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
var builder = WebApplication.CreateBuilder(args);
|
var builder = WebApplication.CreateBuilder(args);
|
||||||
@ -18,6 +20,8 @@ builder.Services.AddDbContext<IdentityServiceDbContext>(options =>
|
|||||||
options.UseNpgsql(builder.Configuration.GetConnectionString(DbConstants.ConnectionStringName));
|
options.UseNpgsql(builder.Configuration.GetConnectionString(DbConstants.ConnectionStringName));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
builder.Services.AddDataSeedingProviders();
|
||||||
|
|
||||||
var app = builder.Build();
|
var app = builder.Build();
|
||||||
|
|
||||||
app.MapDefaultEndpoints();
|
app.MapDefaultEndpoints();
|
||||||
@ -35,4 +39,6 @@ app.UseAuthorization();
|
|||||||
|
|
||||||
app.MapControllers();
|
app.MapControllers();
|
||||||
|
|
||||||
|
app.UseDataSeedingProviders();
|
||||||
|
|
||||||
app.Run();
|
app.Run();
|
||||||
|
@ -0,0 +1,40 @@
|
|||||||
|
using HelloShop.ServiceDefaults.Infrastructure;
|
||||||
|
using Microsoft.AspNetCore.Builder;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace HelloShop.ServiceDefaults.Extensions
|
||||||
|
{
|
||||||
|
public static class DataSeedingExtensions
|
||||||
|
{
|
||||||
|
public static IServiceCollection AddDataSeedingProviders(this IServiceCollection services, Assembly? assembly = null)
|
||||||
|
{
|
||||||
|
assembly ??= Assembly.GetCallingAssembly();
|
||||||
|
|
||||||
|
var dataSeedProviders = assembly.ExportedTypes.Where(t => t.IsAssignableTo(typeof(IDataSeedingProvider)) && t.IsClass);
|
||||||
|
|
||||||
|
dataSeedProviders.ToList().ForEach(t => services.AddTransient(typeof(IDataSeedingProvider), t));
|
||||||
|
|
||||||
|
return services;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IApplicationBuilder UseDataSeedingProviders(this IApplicationBuilder app)
|
||||||
|
{
|
||||||
|
using var serviceScope = app.ApplicationServices.CreateScope();
|
||||||
|
|
||||||
|
var dataSeedingProviders = serviceScope.ServiceProvider.GetServices<IDataSeedingProvider>().OrderBy(x=>x.Order);
|
||||||
|
|
||||||
|
foreach (var dataSeedingProvider in dataSeedingProviders)
|
||||||
|
{
|
||||||
|
dataSeedingProvider.SeedingAsync(serviceScope.ServiceProvider).Wait();
|
||||||
|
}
|
||||||
|
|
||||||
|
return app;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace HelloShop.ServiceDefaults.Infrastructure
|
||||||
|
{
|
||||||
|
public interface IDataSeedingProvider
|
||||||
|
{
|
||||||
|
int Order => default;
|
||||||
|
|
||||||
|
Task SeedingAsync(IServiceProvider serviceProvider);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user