.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.Servicescreate 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