Я пытаюсь заполнить свою базу данных и добавить роли в свое основное веб-приложение ASP.NET. В руководстве, которому я следую, рекомендуется добавить в метод Configure() следующее:
app.UseAuthentication();
MyIdentityDataInitializer.SeedData(userManager, roleManager);
У меня не было проблем с первой строкой, но со второй я получаю сообщение об ошибке, говорящее о том, что userManager и roleManager не существуют, что имеет смысл, потому что, если бы я использовал .NET 5, мой метод настройки выглядел бы так и был бы в порядке :
public void Configure(IApplicationBuilder app,
IHostingEnvironment env,
UserManager<MyIdentityUser> userManager,
RoleManager<MyIdentityRole> roleManager)
{
...
app.UseAuthentication();
MyIdentityDataInitializer.SeedData(userManager, roleManager);
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
Но в .NET 6 я не знаю, как это сделать.
Может кто-нибудь посоветовать по этому поводу, пожалуйста?
Это может быть интересно: codemag.com/Article/2201081/Minimal-APIs-in-.NET-6
@tappetyclick Когда я создал приложение, в нем не было файла startup.cs, я не знал, что могу добавить его обратно - я попробую, спасибо.





В .NET 6 Microsoft удалила класс Startup.cs, в котором ранее был определен ваш метод Configure(). Вместо этого настройка как сервисного контейнера DI (который выполнялся ранее в методе ConfigureServices(IServiceCollection)), так и AspNet Core Application Builder выполняется непосредственно в Program.cs
Теперь, поскольку нет ничего, что автоматически вызывает для вас метод Configure() (и вводит эти значения для вас), вам придется самостоятельно получать ссылки на эти объекты с помощью ServiceProvider. Ваш Program.cs, вероятно, будет выглядеть примерно так:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
// add services that were previously added in ConfigureServices()
var app = builder.Build();
var userManager = app.Services.GetRequiredService<UserManager<MyIdentityUser>>();
var roleManager = app.Services.GetRequiredService<RoleManager<MyIdentityRole>>();
MyIdentityDataInitializer.SeedData(userManager, roleManager);
app.UseAuthentication();
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
* Редактировать: чтобы исправить вашу ошибку (и как поясняет ссылка @tappetyclick), вам нужно сначала создать область, чтобы получить ссылки на ваши объекты UserManager и RoleManager:
using (var scope = app.Services.CreateScope())
{
var userManager = scope.ServiceProvider.GetRequiredService<UserManager<MyIdentityUser>>();
var roleManager = scope.ServiceProvider.GetRequiredService<RoleManager<MyIdentityRole>>();
MyIdentityDataInitializer.SeedData(userManager, roleManager);
}
Спасибо за ваш ответ! Я получаю сообщение об ошибке при его запуске: «Не удается разрешить службу с ограниченной областью действия« Microsoft.AspNetCore.Identity.UserManager »1[Microsoft.AspNetCore.Identity.IdentityUser]» от корневого провайдера. Я не уверен, почему, у вас есть идеи?
Кажется, это примерно то же самое, что и вы (заполнение) stackoverflow.com/questions/72447401/… или попробуйте это: stackoverflow.com/questions/52487989/…
Вы пытаетесь сделать это с помощью минимального кода API, в котором нет StartUp.cs? Я не уверен, как вы это делаете, но вы все еще можете использовать старый способ Startup.cs и иметь тот же метод настройки, я думаю .... по крайней мере, у меня есть метод Configure в Startup my . net 6, и я делаю там DI