Настройка параметров DbContext в Configure вместо ConfigureServices - PullRequest
1 голос
/ 11 июля 2020

У меня ASP. Net Приложение Core 3 с Entity Framework. Учетные данные базы данных находятся в AWS Systems Manager. AWS не важно; что важно, чтобы учетные данные извлекались во время выполнения). В Core 2 я внедрял службу AWS в Program.cs, но в Core 3 это больше невозможно .

Это важная часть того, что у меня есть (для пояснения, IAmazonSimpleSystemsManagement - это AWS сервис, а SSMService - мой сервис, который извлекает учетные данные:

public void ConfigureServices(IServiceCollection services) {
    services.AddAWSService<IAmazonSimpleSystemsManagement>();
    services.AddSingleton<ISSMService, SSMService>();

    services.AddDbContext<MyContext>();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env,
    IOptions<DbContextOptionsBuilder<MyContext>> options, ISSMService ssmService) {

    string path = Configuration.GetValue<string>("SystemsManager:ParametersPath");
    Dictionary<string, string> parameters =  ssmService.GetParametersAsync().Result;
    SqlConnectionStringBuilder builder =
        new SqlConnectionStringBuilder(Configuration.GetConnectionString("DefaultConnection"))
        {
            UserID = parameters[$"{path}/DbUser"], Password = parameters[$"{path}/DbPassword"]
        };
    options.Value.UseSqlServer(builder.ConnectionString);
}

Я пробовал другие типы IOptions, например non -generi c DbContextOptionsBuilder или DbContextOptions. Во всех случаях я получаю исключение во время выполнения: No database provider has been configured for this DbContext. Кажется, что параметры, которые я настраиваю в Configure, не применяются к службе, которую я регистрирую в ConfigureServices. Как мне соединить ie их вместе? Я могу передать MyContext - может быть, есть способ установить таким образом строку подключения?

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