.NET 5 到 .NET 6 最小化托管中的迁移启动和配置方法
.NET 5 to .NET 6 Migration Startup and Configure methodology in Minimal Hosting
我正在将我的 Blazor 应用程序从 .NET 5 迁移到 .NET 6,建议使用新的 Minimal 托管模型。
See Q3 in this doc.
行。因此,在我的 .net5 应用程序中,我有一个典型的启动和配置设置,但作为其中的一部分,我想调用我的数据初始化程序,它会在必要时检查和播种样本数据。
是的,我可以改变方法,但谁知道我以后是否需要它或出于其他原因。
我的 DataInitialiser 使用 UserManager 和 RoleManager,我将它们作为启动 atm 的一部分传递过来,如下所示:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env,
UserManager<ApplicationUser> userManager,
RoleManager<IdentityRole> roleManager,
APDbContext context,
APDataInitializer apDataInitializer
)
{
...
some stuff
...
apDataInitializer.SeedData(userManager, roleManager, context);
我在弄清楚 DI 系统如何工作之前就已经这样做了,所以没问题,是的,我可以将 usermanager、rolemanager 和上下文注入 apDataInitialiser,但我很想知道我会怎么做这是在新设置下吗? ... 至少如何调用 apDataInitialiser 因为它还没有被注入到应用程序中? ...
我已添加:
// Data Initialiser
builder.Services.AddScoped<APDataInitializer>();
进入 program.cs 的 'builder' 部分。
我只是看不出如何从 'app' 部分调用它?
欢迎提出建议。
谢谢
您可以使用app.Services
到create scope and resolve needed scoped服务:
builder.Services.AddEverything....
var app = builder.Build();
using (var scope = app.Services.CreateScope())
{
var userManager = scope.ServiceProvider.GetRequiredService<UserManager<ApplicationUser>>();
var roleManager = scope.ServiceProvider.GetRequiredService<RoleManager<IdentityRole>>();
var context = scope.ServiceProvider.GetRequiredService<APDbContext>();
var apDataInitializer = scope.ServiceProvider.GetRequiredService<APDataInitializer>();
apDataInitializer.SeedData(userManager, roleManager, context);
}
// rest of the set up
我正在将我的 Blazor 应用程序从 .NET 5 迁移到 .NET 6,建议使用新的 Minimal 托管模型。 See Q3 in this doc. 行。因此,在我的 .net5 应用程序中,我有一个典型的启动和配置设置,但作为其中的一部分,我想调用我的数据初始化程序,它会在必要时检查和播种样本数据。
是的,我可以改变方法,但谁知道我以后是否需要它或出于其他原因。
我的 DataInitialiser 使用 UserManager 和 RoleManager,我将它们作为启动 atm 的一部分传递过来,如下所示:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env,
UserManager<ApplicationUser> userManager,
RoleManager<IdentityRole> roleManager,
APDbContext context,
APDataInitializer apDataInitializer
)
{
...
some stuff
...
apDataInitializer.SeedData(userManager, roleManager, context);
我在弄清楚 DI 系统如何工作之前就已经这样做了,所以没问题,是的,我可以将 usermanager、rolemanager 和上下文注入 apDataInitialiser,但我很想知道我会怎么做这是在新设置下吗? ... 至少如何调用 apDataInitialiser 因为它还没有被注入到应用程序中? ...
我已添加:
// Data Initialiser
builder.Services.AddScoped<APDataInitializer>();
进入 program.cs 的 'builder' 部分。
我只是看不出如何从 'app' 部分调用它?
欢迎提出建议。 谢谢
您可以使用app.Services
到create scope and resolve needed scoped服务:
builder.Services.AddEverything....
var app = builder.Build();
using (var scope = app.Services.CreateScope())
{
var userManager = scope.ServiceProvider.GetRequiredService<UserManager<ApplicationUser>>();
var roleManager = scope.ServiceProvider.GetRequiredService<RoleManager<IdentityRole>>();
var context = scope.ServiceProvider.GetRequiredService<APDbContext>();
var apDataInitializer = scope.ServiceProvider.GetRequiredService<APDataInitializer>();
apDataInitializer.SeedData(userManager, roleManager, context);
}
// rest of the set up