代码之家  ›  专栏  ›  技术社区  ›  marcusturewicz

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

  •  1
  • marcusturewicz  · 技术社区  · 8 年前

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

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

    但这是一个例外:

    系统InvalidOperationException:无法解析作用域服务“Amazon”。扩展。NETCore。设置。来自根提供程序的AWSOptions。

    有没有人有办法让ASP重新加载AWS凭据文件?如果可能的话,我想继续使用AWS依赖注入扩展。

    1 回复  |  直到 8 年前
        1
  •  2
  •   Chris Pratt    8 年前

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

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

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