C# 在Configure而不是ConfigureServices中设置DbContext选项

C# 在Configure而不是ConfigureServices中设置DbContext选项,c#,asp.net-core,entity-framework-core,asp.net-core-3.1,C#,Asp.net Core,Entity Framework Core,Asp.net Core 3.1,我有ASP.NETCore3应用程序和实体框架。数据库凭据位于AWS Systems Manager中。AWS并不重要;重要的是在运行时检索凭据)。在Core2中,我在Program.cs中注入了AWS服务,但在Core3中却是这样 这是我拥有的相关部分(为了澄清,IAmazonSimpleSystemsManagement是AWS服务,SSMService是检索凭据的my服务: public void ConfigureServices(IServiceCollection services)

我有ASP.NETCore3应用程序和实体框架。数据库凭据位于AWS Systems Manager中。AWS并不重要;重要的是在运行时检索凭据)。在Core2中,我在
Program.cs
中注入了AWS服务,但在Core3中却是这样

这是我拥有的相关部分(为了澄清,
IAmazonSimpleSystemsManagement
是AWS服务,
SSMService
是检索凭据的my服务:

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);
}
public void配置服务(IServiceCollection服务){
services.AddAWSService();
services.AddSingleton();
services.AddDbContext();
}
public void Configure(IApplicationBuilder应用程序、IWebHostEnvironment环境、,
IOptions选项,ISSMService SSMSSERVICE){
字符串路径=Configuration.GetValue(“SystemsManager:ParametersPath”);
字典参数=ssmService.GetParametersAsync().Result;
SqlConnectionStringBuilder生成器=
新的SqlConnectionStringBuilder(Configuration.GetConnectionString(“DefaultConnection”))
{
UserID=parameters[$“{path}/DbUser]”,Password=parameters[$“{path}/DbPassword”]
};
options.Value.UseSqlServer(builder.ConnectionString);
}

我尝试了其他类型的ioption,如非泛型的
DbContextOptionsBuilder
DbContextOptions
。在所有情况下,我在运行时都会遇到一个异常,
没有为此DbContext配置数据库提供程序。
我在配置中设置的选项似乎没有应用于我注册的服务在ConfigureServices中设置连接。如何将它们连接在一起?我可以传递
MyContext
-也许有一种方法可以这样设置连接字符串?

这是强制性的吗?您必须使用AWS系统管理来获取数据库详细信息吗?是的,意味着您需要在
配置
之前调用另一个
ConfigureServices
。我认为您需要
services.AddDbContext((提供程序,选项)=>{options.UseSqlServer(提供程序.GetService().GetConnectionString(“默认连接”),=>{})
或其他非常重要的事情close@Rajesh-我可以使用类似的东西;但在.NET Core
源代码中。据我所知,数据库
没有连接信息。@AluanHaddad-对不起,我不知道你想说什么。我知道在
配置
之前调用了
配置服务
我的问题的关键是,我在ConfigureServices中没有连接字符串。我在ConfigureServices中注册SSMService,在Configure中注入它,然后检索凭据。但我无法在
Configure()中配置
DbContext
我的意思是,因为
DbContext
是由容器按需创建的,如果您使用接受factory委托的
服务.AddDbContext
重载,您将可以访问稍后添加的配置。例如,在factory委托中,您可以解析其他服务并使用它们配置e
DbContext
我在这里写到:这是强制性的吗?您必须使用AWS系统管理数据库详细信息?是意味着您需要在
Configure
之前调用另一个
ConfigureServices
。我想您需要
services.AddDbContext((提供程序,选项)=>{options.UseSqlServer(provider.GetService().GetConnectionString(“DefaultConnection”),{})
或其他非常重要的事情close@Rajesh-我可以使用类似的东西;但在.NET Core
源代码中。据我所知,数据库
没有连接信息。@AluanHaddad-对不起,我不知道你想说什么。我知道在
配置
之前调用了
配置服务
我的问题的关键是,我在ConfigureServices中没有连接字符串。我在ConfigureServices中注册SSMService,在Configure中注入它,然后检索凭据。但我无法在
Configure()中配置
DbContext
我的意思是,因为
DbContext
是由容器按需创建的,如果您使用接受factory委托的
服务.AddDbContext
重载,您将可以访问稍后添加的配置。例如,在factory委托中,您可以解析其他服务并使用它们配置e
DbContext
我在这里写到: