1

我在 docker 容器中运行 ASP.NET Core MVC 应用程序,并带有 AWS 凭证文件。我有另一个服务在旧密钥过期时将新密钥放入文件中,但这些新密钥似乎没有传播到我的 MVC 应用程序并且我的网站崩溃。我已经看到,通常要重新加载强类型配置的解决方案是使用 IOptionsSnapshot,例如:

services.AddDefaultAWSOptions(Configuration.GetAWSOptions())
        .AddScoped(config => config.GetService<IOptionsSnapshot<AWSOptions>>().Value)
        .AddAWSService<IAmazonS3>();

但这给出了一个例外:

System.InvalidOperationException:无法从根提供商解析范围服务“Amazon.Extensions.NETCore.Setup.AWSOptions”。

有没有人有让 ASP 重新加载 AWS 凭证文件的解决方案?如果可能,我想继续使用 AWS 依赖注入扩展。

4

1 回答 1

2

默认情况下,AddAWSService在单例范围内注册客户端工厂,这意味着它是一个并且在应用程序的生命周期内完成。但是,AddAWSService有一个lifetime参数可以用来自定义它。本质上,您需要在客户端上缩短生命周期,以便使用新设置重新创建它。您可以选择“作用域”(请求作用域)或“瞬态”(每次注入新实例)。

显然,使用“范围”,您将在每个请求中获得与更新设置的连接。但是,如果您在更改设置后对同一请求执行任何进一步操作,它将保持与旧设置的旧连接(即,您仍然会遇到相同的问题,至少在请求的生命周期内)。

使用“瞬态”作用域,您将拥有一个具有最新设置的客户端,但最终您基本上每次使用都会拥有一个客户端,这可能并不理想。

于 2018-01-22T14:52:46.387 回答