使用 AWSSDK.Extensions.NETCore.Setup 和 IConfiguration 界面 - 适用于 .NET 的 Amazon SDK(V3)
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

适用于 .NET 的 Amazon SDK 版本 4(V4)已经发布!

要开始使用新版本的 SDK,请参阅 适用于 .NET 的 Amazon SDK(V4)开发人员指南,尤其是关于迁移到版本 4 的主题。

使用 AWSSDK.Extensions.NETCore.Setup 和 IConfiguration 界面

(本主题之前的标题是“使用.NET Core 配置适用于 .NET 的 Amazon SDK”)

.NET Core 中最大的改变之一是删除了以前在 .NET Framework 和 ASP.NET 应用程序中使用的 ConfigurationManager 以及标准 app.configweb.config 文件。

.NET Core 中的配置基于配置提供商建立的键/值对。配置提供商将配置数据从各种配置源读取为键/值对,包括命令行参数、目录文件、环境变量和设置文件。

注意

有关更多信息,请参阅 ASP.NET Core 中的配置

为了便于将适用于 .NET 的 Amazon SDK与 .NET Core 结合使用,您可以使用 AWSSDK.Extensions.NETCore.Setup NuGet 程序包。与许多 .NET Core 库一样,它将扩展方法添加到 Amazon 接口,以实现无缝获取 IConfiguration 配置。

该软件包的源代码位于 GitHub 上,网址为 https://github.com/aws/aws-sdk-net/tree/aws-sdk-net-v3.7/extensions/src/AWSSDK.Extensions.NETCore.Setup

使用 AWSSDK.Extensions.NETCore.Setup

假设您创建了一个 ASP.NET Core 模型视图控制器(MVC)应用程序,该应用程序可以使用 Visual Studio 中的 ASP.NET Core Web Application 模板或在 .NET Core CLI 中运行 dotnet new mvc ... 来完成。创建此类应用程序时,Startup.cs 的构造函数通过从配置提供商读取各种输入源来处理配置,例如读取 appsettings.json

public Startup(IConfiguration configuration) { Configuration = configuration; }

要使用 Configuration 对象获取 Amazon 选项,请先添加 AWSSDK.Extensions.NETCore.Setup NuGet 程序包。然后,将选项添加到下面所述的配置文件中。

请注意,添加到您项目中的其中一个文件是 appsettings.Development.json。这就代表 EnvironmentName 设置为 Development。在开发过程中,将配置放入此文件中,该文件只能在本地测试期间读取。在您部署将 EnvironmentName 设置为 Production 的 Amazon EC2 实例时,将忽略此文件并且适用于 .NET 的 Amazon SDK回退到为 Amazon EC2 实例配置的 IAM 凭证和区域。

以下配置设置显示您可以添加到您项目的 appsettings.Development.json 文件中用于提供 Amazon 设置的值的示例。

{ "AWS": { "Profile": "local-test-profile", "Region": "us-west-2" }, "SupportEmail": "TechSupport@example.com" }

要访问 CSHTML 文件中的设置,请使用 Configuration 指令:

@using Microsoft.Extensions.Configuration @inject IConfiguration Configuration <h1>Contact</h1> <p> <strong>Support:</strong> <a href='mailto:@Configuration["SupportEmail"]'>@Configuration["SupportEmail"]</a><br /> </p>

要访问在文件中从代码设置的 Amazon 选项,请调用在 IConfiguration 上添加的 GetAWSOptions 扩展方法。

要从这些选项构造服务客户端,请调用 CreateServiceClient。以下示例代码说明了如何创建 Amazon S3 服务客户端。(请务必将 AWSSDK.S3 NuGet 程序包添加到您的项目)。

var options = Configuration.GetAWSOptions(); IAmazonS3 client = options.CreateServiceClient<IAmazonS3>();

您还可以使用 appsettings.Development.json 文件中的多个条目创建具有不兼容设置的多个服务客户端,如以下示例所示,其中 service1 的配置包括 us-west-2 区域,service2 的配置包括特殊端点 URL

{ "service1": { "Profile": "default", "Region": "us-west-2" }, "service2": { "Profile": "default", "ServiceURL": "URL" } }

然后,您可以使用 JSON 文件中的条目获取特定服务的选项。例如,要获取 service1 的设置,请使用以下项目。

var options = Configuration.GetAWSOptions("service1");

appsettings 文件中允许的值

以下应用程序配置值可以在 appsettings.Development.json 文件中设置。字段名必须使用所示的大小写。有关这些设置的详细信息,请参阅 AWS.Runtime.ClientConfig 类。

  • 区域

  • 配置文件

  • ProfilesLocation

  • SignatureVersion

  • RegionEndpoint

  • UseHttp

  • ServiceURL

  • AuthenticationRegion

  • AuthenticationServiceName

  • MaxErrorRetry

  • LogResponse

  • BufferSize

  • ProgressUpdateInterval

  • ResignRetries

  • AllowAutoRedirect

  • LogMetrics

  • DisableLogging

  • UseDualstackEndpoint

ASP.NET Core 依赖关系注入

AWSSDK.Extensions.NETCore.Setup NuGet 程序包还集成了 ASP.NET 内核中的新依赖关系注入系统。应用程序的 Startup 类中的 ConfigureServices 方法是添加 MVC 服务的位置。如果应用程序正在使用实体框架,则这也是进行初始化的位置。

public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddMvc(); }
注意

有关 .NET Core 中依赖关系注入的背景信息在 .NET Core 文档网站上提供。

以下 AWSSDK.Extensions.NETCore.Setup NuGet 程序包将新的扩展方法添加到 IServiceCollection,您可用来将 Amazon 服务添加到依赖关系注入。以下代码演示如何添加从 IConfiguration 读取的 Amazon 选项,用于将 Amazon S3 和 DynamoDB 添加到服务列表中。(请务必将 AWSSDK.S3AWSSDK.DynamoDBv2 程序包添加到您的项目)。

public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddMvc(); services.AddDefaultAWSOptions(Configuration.GetAWSOptions()); services.AddAWSService<IAmazonS3>(); services.AddAWSService<IAmazonDynamoDB>(); }

现在,如果您的 MVC 控制器使用 IAmazonS3IAmazonDynamoDB 作为其构造函数中的参数,则依赖关系注入系统会传入这些服务。

public class HomeController : Controller { IAmazonS3 S3Client { get; set; } public HomeController(IAmazonS3 s3Client) { this.S3Client = s3Client; } ... }