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
。
我在 .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
。