У меня 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
- может быть, есть способ установить таким образом строку подключения?