Получить экземпляр DatabaseContext внутри IConfigureOptions - PullRequest
1 голос
/ 07 ноября 2019

Я следовал этому руководству , чтобы получить параметры из базы данных, но у меня возникла ошибка

System.InvalidOperationException: 'ValueFactory попытался получить доступ к свойству Valueэтот экземпляр. '

Я не знаю, почему это происходит. Ошибка генерируется в методе OnModelCreating(), особенно в base.OnModelCreating(modelBuilder);. Я использую Identity и .NET Core 3

public void ConfigureServices(IServiceCollection serviceCollection)
{
    serviceCollection.AddDbContext<DatabaseContext>(x =>
     x.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

    // some code here

    serviceCollection.AddIdentity<ApplicationUser, ApplicationRole>()
        .AddEntityFrameworkStores<DatabaseContext>()
        .AddRoleStore<ApplicationRoleStore>()
        .AddUserStore<ApplicationUserStore>()
        .AddUserManager<ApplicationUserManager>()
        .AddRoleManager<ApplicationRoleManager>()
        .AddSignInManager<ApplicationSignInManager>()
        .AddDefaultTokenProviders();

        serviceCollection.AddSingleton<IConfigureOptions<IdentityOptions>, ConfigureIdentityOptions>();
}

public class ConfigureIdentityOptions : IConfigureOptions<IdentityOptions>
{
    private readonly IServiceScopeFactory _serviceScopeFactory;

    public ConfigureIdentityOptions(IServiceScopeFactory serviceScopeFactory)
    {
        _serviceScopeFactory = serviceScopeFactory;
    }

    public void Configure(IdentityOptions identityOptions)
    {
        using (var currentScope = _serviceScopeFactory.CreateScope())
        {
            using (var databaseContext = currentScope.ServiceProvider.GetRequiredService<DatabaseContext>())
            {
                var users = databaseContext.Users.ToList(); // ERROR HERE
            }
        }
    }
}

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder); // ERROR HERE

    modelBuilder.HasDefaultSchema("Sample.API");
}

Здесь Вы можете увидеть весь код.

Скриншот ошибки

enter image description here

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