Я прочитал различные статьи по этой проблеме и похоже, что многие из нас сталкивались с этой проблемой. Я понял концепцию, что, поскольку ChildService ограничен, но FatherService является единичным, он не позволит нам работать.
Но дело в том, что я добавляю обе свои службы IAuthRepository и AuthUserContext как Scoped, поэтому я не уверен, почему он жалуется на это.
Код в моем классе запуска
var userDbConnectionString =
Configuration["connectionStrings:userDBConnectionString"];
services.AddDbContext<AuthUserContext>(o =>
o.UseSqlServer(userDbConnectionString));
services.AddScoped<IAuthUserRepository, AuthUserRepository>();
В приведенном выше коде вы можете увидеть Мой DbContext, т. Е. AuthUserContext добавлен с Lifetime as Scoped. Аналогичным образом добавляется IAuthRepository в качестве области видимости.
Может кто-нибудь помочь, почему он жалуется на ошибку ниже времени выполнения? несмотря на то, что я не делал ничего похожего на сервис Scoped от Singleton.
Произошло необработанное исключение при обработке запроса.
InvalidOperationException: не может использовать ограниченную службу 'IDP.Entities.AuthUserContext'
из синглтона 'IDP.Services.IAuthUserRepository'
Мой класс репозитория (для простоты я удалил остальную часть кода)
public class AuthUserRepository : IAuthUserRepository
{
AuthUserContext _context;
public AuthUserRepository()
{
}
public AuthUserRepository(AuthUserContext context)
{
_context = context;
}
}
Мой класс AuthUserContext
public class AuthUserContext : DbContext
{
public AuthUserContext(DbContextOptions<AuthUserContext> options)
: base(options)
{
}
public DbSet<User> Users { get; set; }
public DbSet<UserClaim> Claims { get; set; }
public DbSet<OtpDetails> OtpDetails { get; set; }
}
Я использую Microsoft.AspNetCore.App (2.1.1) и IdentityServer4 (2.3.2) Nugets
Любая помощь будет оценена.
Это мой метод настройки служб
public void ConfigureServices(IServiceCollection services)
{
var userDbConnectionString = Configuration["connectionStrings:userDBConnectionString"];
services.AddDbContext<AuthUserContext>(o => o.UseSqlServer(userDbConnectionString));
services.AddScoped<IAuthUserRepository, AuthUserRepository>();
var migrationsAssembly = typeof(Startup).GetTypeInfo().Assembly.GetName().Name;
services.AddMvc();
services.AddSingleton<IConfiguration>(Configuration);
var identityServerDataDBConnectionString = Configuration["connectionStrings:identityServerDataDBConnectionString"];
services.AddIdentityServer()
.AddDeveloperSigningCredential()
.AddUserStore()
.AddConfigurationStore(options =>
{
options.ConfigureDbContext = builder => builder.UseSqlServer(identityServerDataDBConnectionString,
sql => sql.MigrationsAssembly(migrationsAssembly));
})
.AddOperationalStore(options =>
{
options.ConfigureDbContext = builder => builder.UseSqlServer(identityServerDataDBConnectionString,
sql => sql.MigrationsAssembly(migrationsAssembly));
});
}
Точное исключение, которое я получаю, приведено ниже:
Произошло необработанное исключение при обработке запроса.
InvalidOperationException: не может использовать ограниченную службу 'CCIDP.Entities.AuthUserContext'
из синглтона 'CCIDP.Services.IAuthUserRepository'