[英]AWS .NET SDK configure S3 Client with ASP.NET Core Dependency Injection
工具
我想做什么
為使用 localstack 端點作為 S3 的 ServiceURL 的開發環境配置 Amazon S3 客戶端
我正在嘗試使用 ASP.NET Core 的本機依賴注入在我的Startup.cs
文件中全局配置 S3 客戶端
public void ConfigureServices(IServiceCollection services)
{
...
services.AddAWSService<IAmazonS3>();
}
問題
我不知道如何為 S3 客戶端設置 ServiceURL。 我在AWS 文檔中看到您可以在appsettings.json
文件中配置此屬性。 但是,這並不能解決我的問題,因為我需要集成多個 AWS 服務。
我在谷歌上搜索的所有內容都表明你只需要做這樣的事情:
var s3Client = new AmazonS3Client(new AmazonS3Config
{
ServiceURL = "http://localhost:5002"
});
但是我必須在使用 S3 客戶端的每個類中都這樣做,這似乎不正確。
任何幫助表示贊賞。 謝謝
好吧,我想我想通了這一點。
而不是使用內置的 ASP.NET Core DI:
services.AddAWSService<IAmazonS3>();
我正在像這樣使用 Autofac( 文檔):
var s3Config = new AmazonS3Config
{
ServiceURL = _configuration.GetSection("AWS:ServiceURL").Value,
ForcePathStyle = true
};
builder.RegisterType<AmazonS3Client>()
.As<IAmazonS3>()
.WithParameter(new TypedParameter(typeof(AmazonS3Config), s3Config))
.InstancePerLifetimeScope();
您可以添加對AWSSDK.Extensions.NETCore.Setup
的包引用。 這使您可以訪問一些擴展方法,以幫助您在 .NET Core DI 中設置 AWS 服務。
services.AddDefaultAWSOptions(config.GetAWSOptions());
services.AddAWSService<IAmazonS3>();
services.AddAWSService<IAmazonSQS>();
然后,您可以在啟用edge
服務的情況下啟動 LocalStack 並設置PORT_EDGE_HTTP
。
PORT_EDGE_HTTP=50234 SERVICES=edge,s3,sqs localstack start
這允許您對 LocalStack 提供的所有服務使用相同的ServiceURL
,而不是在它們自己的端口上運行的各種特定於服務的 URL。 這可以通過appsettings.json
設置。
{
"AWS": {
"ServiceURL": "http://localhost:50234"
}
}
注意:有一件事我還在試圖找出是如何設置ForcePathStyle
通過appsettings.json
。 AWS 不需要這個集合,但顯然 LocalStack 需要(至少現在是這樣)。
對於多個AmazonS3Client
,您可以像配置多個IAmazonS3
IAmazonS3
public interface IAmazonS3A: IAmazonS3 { } public interface IAmazonS3B : IAmazonS3 { }
Startup.cs
services.AddAWSService<IAmazonS3A>(Configuration.GetAWSOptions("AWSA")); services.AddAWSService<IAmazonS3B>(Configuration.GetAWSOptions("AWSB"));
appsettings.json
{ "AWSA": { "Profile": "local-test-profile", "Region": "us-west-2" }, "AWSB": { "Profile": "local-test-profile", "Region": "us-west-2" }, }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.