如何在运行时重新加载AWS选项

时间:2018-01-22 07:31:10

标签: c# asp.net-core asp.net-core-mvc aws-sdk aws-sdk-net

我在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依赖注入扩展。

1 个答案:

答案 0 :(得分:1)

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

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

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