Невозможно использовать услугу Scoped от Singleton - PullRequest
0 голосов
/ 11 марта 2019

Я прочитал различные статьи по этой проблеме и похоже, что многие из нас сталкивались с этой проблемой. Я понял концепцию, что, поскольку 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'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...