我在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依赖注入扩展。
答案 0 :(得分:1)
默认情况下,AddAWSService
在单例作用域中注册客户端工厂,这意味着它是一个并在应用程序的生命周期内完成。但是,AddAWSService
有一个lifetime
参数,您可以使用它来自定义此参数。从本质上讲,您需要在客户端上缩短生命周期,以便使用新设置重新创建它。您可以选择“范围”(请求范围)或“瞬态”(每次注入新实例)。
显然,对于“scoped”,您将获得每个请求与更新设置的连接。但是,如果在更改设置后对同一请求执行任何进一步操作,它将保持与旧设置的旧连接(即,您仍将遇到相同的问题,至少在请求的生命周期内)。
使用“瞬态”范围,您将拥有一个具有最新设置的客户端,但您最终将基本上使用客户端进行每次使用,这可能并不理想。