ServiceProviderExtensions GetRequiredService<DatabaseContext> 到 IdentityDbConext

ServiceProviderExtensions GetRequiredService<DatabaseContext> to IdentityDbConext

我在 .NET core 6 中遇到问题。我需要我的 serviceProvider 将自定义 DatabaseContext 转换为 IdentityDbContext。

我在项目A中有类似的情况,它在那里工作。在项目 B 中它不起作用

项目A:

public class DatabaseContext : DbContext //DbContext is of Microsoft.EntityFrameworkCore

在Program.cs

services.TryAddScoped<DbContext>(sp => sp.GetRequiredService<DatabaseContext>());

有效。

项目 B:

public class DatabaseContext : IdentityDbContext<ApplicationUser, ApplicationRole, string, IdentityUserClaim<string>, ApplicationUserRole, IdentityUserLogin<string>, IdentityRoleClaim<string>, IdentityUserToken<string>> //AspNetCore.Identity.EntityFrameworkCore

在Program.cs

services.TryAddScoped<IdentityDbContext>(sp => sp.GetRequiredService<DatabaseContext>()); //services is of IServiceCollection

导致错误:

Cannot implicitly convert type 'DatabaseContext' to Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityDbContext'

为什么项目A的DatabaseContext可以转为DbContext,而项目B的DatabaseContext不能转为IdentityDbContext?

我想使用我自己创建的 nuget 包中的服务。一种可行但丑陋的解决方法是将包的代码包含在主项目中并且不要在其中使用 IdentityDbContext 而是直接使用自定义 DatabaseContext.

IdentityDbContext<TUser,TRole,TKey,TUserClaim,TUserRole,TUserLogin,TRoleClaim,TUserToken> class inherits from IdentityUserContext<TUser,TKey,TUserClaim,TUserLogin,TUserToken> 直接继承自 DbContext

public abstract class IdentityUserContext<TUser,TKey,TUserClaim,TUserLogin,TUserToken> : Microsoft.EntityFrameworkCore.DbContext ...

所以 ProjectB.DatabaseContext 不是 IdentityDbContext