View a markdown version of this page

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

Amazon SDK for .NET V3 已结束支持。

我们建议您迁移到 Amazon SDK for .NET V4。有关如何迁移的更多详细信息和信息,请参阅我们的终止支持公告

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 AWSSDK .Extions。 NETCore.Setup 和界面 IConfiguration

(本主题之前的标题是 “ Amazon SDK for .NET 使用.NET 核心配置”)

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

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

注意

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

为了便于在.NET Core 中 Amazon SDK for .NET 使用,你可以使用.E AWSSDKxtensions。 NETCore.安装 NuGet 包。与许多.NET Core 库一样,它向IConfiguration接口添加了扩展方法,以实现无缝 Amazon 配置。

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

使用 AWSSDK .Extions。 NETCore.Setup

假设你创建了一个 ASP.NET Core Model-View-Controller (MVC) 应用程序,可以使用 Visual Studio 中的 ASP.NET Core Web 应用程序模板或在.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设置为生产的 Amazon EC2 实例时,该文件将被忽略,并回退到为 Amazon EC2 实例配置的 IAM 证书和区域。 Amazon SDK for .NET

以下配置设置显示您可以添加到您项目的 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 选项,请调用添加到的GetAWSOptions扩展方法IConfiguration

要从这些选项构造服务客户端,请调用 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 类。

  • Region

  • 配置文件

  • 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 Core 中的新依赖注入系统集成。应用程序的 Startup 类中的 ConfigureServices 方法是添加 MVC 服务的位置。如果应用程序正在使用实体框架,则这也是进行初始化的位置。

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

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

AWSSDK.Extensions.NETCore.Setup NuGet 软件包添加了新的扩展方法IServiceCollection,您可以使用这些方法向依赖注入中添加 Amazon 服务。以下代码向您展示了如何添加从中读取的 Amazon 选项,IConfiguration以便将 Amazon S3 和 DynamoDB 添加到服务列表中。(请务必将 AWSSDK.S3 和AWSSDK. Dynamo DBv2 NuGet 包添加到您的项目中。)

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; } ... }