我的教科书展示了一个构建身份服务的示例,下面是代码:
//startup.cs
public void Configure(IApplicationBuilder app) {
app.UseStatusCodePages();
app.UseDeveloperExceptionPage();
app.UseStaticFiles();
app.UseAuthentication();
app.UseMvcWithDefaultRoute();
//try to seed an admin account for the first time the app runs
AppIdentityDbContext.CreateAdminAccount(app.ApplicationServices, Configuration).Wait();
}
//AppIdentityDbContext.cs
public class AppIdentityDbContext : IdentityDbContext<AppUser>
{
public AppIdentityDbContext(DbContextOptions<AppIdentityDbContext> options) : base(options) { }
public static async Task CreateAdminAccount(IServiceProvider serviceProvider, IConfiguration configuration)
{
UserManager<AppUser> userManager = serviceProvider.GetRequiredService<UserManager<AppUser>>();
RoleManager<IdentityRole> roleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
string username = configuration["Data:AdminUser:Name"];
string email = configuration["Data:AdminUser:Email"];
string password = configuration["Data:AdminUser:Password"];
string role = configuration["Data:AdminUser:Role"];
}
}
}
}
然后教科书上说:
因为我通过 IApplicationBuilder.ApplicationServices 提供程序访问作用域服务,所以我还必须禁用 Program 类中的依赖项注入作用域验证功能,如下所示:
//Program.cs
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseDefaultServiceProvider(options => options.ValidateScopes = false)
.Build();
我对 DI 有基本的了解,但我对这个例子很困惑,以下是我的问题:
Q1-通过 IApplicationBuilder.ApplicationServices 提供程序访问范围服务 是什么意思?它尝试访问哪些服务?为什么它的作用域不是瞬态的或单例的?
Q2-为什么我们必须禁用依赖注入范围验证,范围验证试图实现什么目的?
手掌心
相关分类