diff --git a/Minio/MinioConfig.cs b/Minio/MinioConfig.cs index d7cdcdcf7..0b42bbfe8 100644 --- a/Minio/MinioConfig.cs +++ b/Minio/MinioConfig.cs @@ -1,5 +1,4 @@ using System.Net; -using Microsoft.Extensions.DependencyInjection; using Minio.Credentials; using Minio.Handlers; @@ -7,7 +6,7 @@ namespace Minio; public class MinioConfig { - internal ServiceProvider ServiceProvider { get; set; } + internal IServiceProvider ServiceProvider { get; set; } // Cache holding bucket to region mapping for buckets seen so far. public BucketRegionCache RegionCache { get; internal set; } diff --git a/Minio/ServiceCollectionExtensions.cs b/Minio/ServiceCollectionExtensions.cs index f14c049df..3406c01b0 100644 --- a/Minio/ServiceCollectionExtensions.cs +++ b/Minio/ServiceCollectionExtensions.cs @@ -41,24 +41,29 @@ public static IServiceCollection AddMinio( if (services is null) throw new ArgumentNullException(nameof(services)); if (configureClient == null) throw new ArgumentNullException(nameof(configureClient)); - var minioClientFactory = new MinioClientFactory(configureClient); - services.TryAddSingleton(minioClientFactory); + services.TryAddSingleton(_ => new MinioClientFactory(configureClient)); - var client = minioClientFactory.CreateClient(); - client.Config.ServiceProvider = services.BuildServiceProvider(); switch (lifetime) { case ServiceLifetime.Singleton: - services.TryAddSingleton(_ => client); + services.TryAddSingleton(CreateClient); break; case ServiceLifetime.Scoped: - services.TryAddScoped(_ => client); + services.TryAddScoped(CreateClient); break; case ServiceLifetime.Transient: - services.TryAddTransient(_ => client); + services.TryAddTransient(CreateClient); break; } return services; + + static IMinioClient CreateClient(IServiceProvider serviceProvider) + { + var factory = serviceProvider.GetRequiredService(); + var client = factory.CreateClient(); + client.Config.ServiceProvider = serviceProvider; + return client; + } } }