ich diesen Code hätte in meinem Startup.cs:ASP.NET Core 2 - Identität - DI Fehler mit benutzerdefinierten Rollen
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, ApplicationRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
In derselben Datei, ich ersetzt auch die service.UseIdentity()
mit app.UseAuthentication();
wie von MS empfohlen in die neue Version von ASP-Core 2.
Mein Db Kontext:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, string>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// Customize the ASP.NET Identity model and override the defaults if needed.
// For example, you can rename the ASP.NET Identity table names and more.
// Add your customizations after calling base.OnModelCreating(builder);
}
//public DbSet<ApplicationUser> ApplicationUser { get; set; }
//public DbSet<ApplicationRole> ApplicationRole { get; set; }
}
Und meine benutzerdefinierte Rollenklasse:
public class ApplicationRole : IdentityRole
{
public ApplicationRole() : base() { }
public ApplicationRole(string roleName) : base(roleName) { }
public bool IsDefault { get; set; }
}
Wenn die Anwendung ausgeführt wird, habe ich eine SeedDatabase Hilfsmethode bekam, der ausgeführt wird:
var roleManager = serviceProvider.GetService<RoleManager<ApplicationRole>>();
Das war alles funktioniert gut, aber da VS 2017 auf die neueste Version und die Installation von .NET Core 2.0, diese letzte Aktualisierung Codezeile wirft nun die folgende Ausnahme:
System.AggregateException occurred
HResult=0x80131500
Message=One or more errors occurred. (Cannot resolve scoped service 'Microsoft.AspNetCore.Identity.RoleManager`1[CspLicensingPortal.Models.ApplicationRole]' from root provider.)
Source=<Cannot evaluate the exception source>
StackTrace:
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
at System.Threading.Tasks.Task.Wait()
at CspLicensingPortal.Startup.Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) in D:\gsandorx\Documents\Visual Studio 2017\Projects\CspLicensingPortal\CspLicensingPortal\Startup.cs:line 275
Inner Exception 1:
InvalidOperationException: Cannot resolve scoped service 'Microsoft.AspNetCore.Identity.RoleManager`1[MyApplication.Models.ApplicationRole]' from root provider.
ich, warum die DI-Service-Manager nicht sicher bin, sind nicht mehr in der Lage meine ApplicationRole Klasse zu finden. Ich habe überprüft und alle meine Referenzen verwenden diese Klasse und nicht die Standard-IdentityRole.
Irgendwelche Ideen?
Dank ersetzen! Ich denke, viele Dinge haben sich in 2.0 geändert und die Dokumentation da draußen gibt es noch in Windeln :) – Bmelca
Nicht Windeln, eher wie der Mülleimer. Ich bin vom .NET Core Team mit der neuesten Version enttäuscht. Es ist Pflaume erbärmlich. – Keith
@Manos, vielen Dank für diese Antwort. Das Verrückte daran ist, dass ich ein wenig in den Mund gekackt habe, während ich über die Tatsache nachdachte, dass das .NET Core-Team es für sinnvoller hielt, mehr Codezeilen hinzuzufügen, um eine Funktion auszuführen, die eine einzige Codezeile benötigte. Wieder so enttäuscht (per meinem Kommentar oben) – Keith