diff --git a/SW.CloudFiles.S3.Extensions/IServiceCollectionExtensions.cs b/SW.CloudFiles.S3.Extensions/IServiceCollectionExtensions.cs index 4e7e089..d4b210c 100644 --- a/SW.CloudFiles.S3.Extensions/IServiceCollectionExtensions.cs +++ b/SW.CloudFiles.S3.Extensions/IServiceCollectionExtensions.cs @@ -130,7 +130,7 @@ public static IServiceCollection AddS3CloudFiles(this IServiceCollection service } serviceCollection.AddSingleton(cloudFilesOptions); - serviceCollection.AddTransient(); + serviceCollection.AddSingleton(); return serviceCollection; } diff --git a/SW.CloudFiles.S3/Extensions/CloudFilesOptionsExtensions.cs b/SW.CloudFiles.S3/Extensions/CloudFilesOptionsExtensions.cs index 2f1f509..74448a0 100644 --- a/SW.CloudFiles.S3/Extensions/CloudFilesOptionsExtensions.cs +++ b/SW.CloudFiles.S3/Extensions/CloudFilesOptionsExtensions.cs @@ -9,14 +9,16 @@ namespace SW.CloudFiles.S3; public static class CloudFilesOptionsExtensions { /// Creates a configured from the given options. - public static AmazonS3Client CreateClient(this CloudFilesOptions cloudFilesOptions) + public static AmazonS3Client CreateClient(this S3CloudFilesOptions cloudFilesOptions) { var clientConfig = new AmazonS3Config { RegionEndpoint = RegionEndpoint.USEast1, ServiceURL = cloudFilesOptions.ServiceUrl, UseHttp = new Uri(cloudFilesOptions.ServiceUrl).Scheme.ToLower() == "http", - ForcePathStyle = true + ForcePathStyle = true, + Timeout = TimeSpan.FromSeconds(cloudFilesOptions.TimeoutSeconds), + MaxErrorRetry = cloudFilesOptions.MaxErrorRetry }; return new AmazonS3Client(cloudFilesOptions.AccessKeyId, cloudFilesOptions.SecretAccessKey, clientConfig); diff --git a/SW.CloudFiles.S3/S3CloudFilesOptions.cs b/SW.CloudFiles.S3/S3CloudFilesOptions.cs index 434210d..57e9cff 100644 --- a/SW.CloudFiles.S3/S3CloudFilesOptions.cs +++ b/SW.CloudFiles.S3/S3CloudFilesOptions.cs @@ -10,4 +10,10 @@ public class S3CloudFilesOptions : CloudFilesOptions /// Lifecycle rules are: temp1/ (1 day), temp7/ (7 days), temp30/ (30 days), temp365/ (365 days). /// public bool DisableAutoLifecycle { get; set; } + + /// Per-request timeout, in seconds, for the underlying . Defaults to 15. + public int TimeoutSeconds { get; set; } = 15; + + /// Max automatic retries for the underlying . Defaults to 2. + public int MaxErrorRetry { get; set; } = 2; } diff --git a/SW.CloudFiles.S3/Services/CloudFilesService.cs b/SW.CloudFiles.S3/Services/CloudFilesService.cs index 0a788e2..ee80076 100644 --- a/SW.CloudFiles.S3/Services/CloudFilesService.cs +++ b/SW.CloudFiles.S3/Services/CloudFilesService.cs @@ -20,7 +20,7 @@ public class CloudFilesService : IDisposable, ICloudFilesService public CloudFilesService(CloudFilesOptions cloudFilesOptions) { this.cloudFilesOptions = cloudFilesOptions; - client = cloudFilesOptions.CreateClient(); + client = ((S3CloudFilesOptions)cloudFilesOptions).CreateClient(); } ///