コード例 #1
0
        /// <summary>
        /// 添加指定程序集集合中所有已定义 <see cref="AutoRegisterableServiceAttribute"/> 特性的服务集合。
        /// </summary>
        /// <param name="builder">给定的 <see cref="ICoreBuilder"/>。</param>
        /// <param name="assemblies">给定要查找的程序集数组。</param>
        /// <returns>返回 <see cref="ICoreBuilder"/>。</returns>
        public static ICoreBuilder AddAutoRegistrationServices(this ICoreBuilder builder,
                                                               IEnumerable <Assembly> assemblies)
        {
            var objectType = typeof(object);

            assemblies.InvokeTypes(type =>
            {
                if (type.TryGetCustomAttribute(out AutoRegisterableServiceAttribute result))
                {
                    var serviceType = result.ServiceType;

                    if (serviceType.IsNull() && result.UseBaseTypeAsServiceType)
                    {
                        // 如果类型的基础类型为空或是接口,则基础类型返回 Object 类型
                        serviceType = type.BaseType != objectType ? type.BaseType
                            : type.GetInterfaces().FirstOrDefault();
                    }

                    if (serviceType.IsNull())
                    {
                        // 使用当前类型为服务类型
                        serviceType = type;
                    }

                    builder.Services.AddByCharacteristics(serviceType, type, result.Characteristics);
                }
            });

            return(builder);
        }
コード例 #2
0
ファイル: ICoreBuilder.cs プロジェクト: zsmj007/PoESkillTree
 public BinaryOperatorCoreBuilder(
     ICoreBuilder <TResult> left, ICoreBuilder <TResult> right, Func <TResult, TResult, TResult> @operator)
 {
     _left     = left;
     _right    = right;
     _operator = @operator;
 }
コード例 #3
0
        public static IHttpClientBuilder UseHttpClientFactory(this ICoreBuilder clientBuilder)
        {
            CustomHttpClientFactoryBuilder builder = new CustomHttpClientFactoryBuilder(clientBuilder.Services, "SimpleS3");

            //Contrary to the naming, this does not add a HttpClient to the services. It is the factories etc. necessary for HttpClientFactory to work.
            //It also bind the HttpClient to HttpClientFactoryNetworkDriver instead of adding it directly to the service collection.
            //Note that it adds INetworkDriver as a transient service in order to change out the HttpClient.
            builder.Services.AddHttpClient <INetworkDriver, HttpClientFactoryNetworkDriver>(builder.Name);

            builder.Services.Configure <HttpClientFactoryOptions>(builder.Name, (options, x) =>
            {
                IOptions <HttpClientFactoryConfig> factoryConfig = x.GetService <IOptions <HttpClientFactoryConfig> >();
                options.HandlerLifetime = factoryConfig.Value.HandlerLifetime;

                options.HttpClientActions.Add(client =>
                {
                    client.DefaultRequestHeaders.UserAgent.TryParseAdd(Constants.DefaultUserAgent);
                    client.DefaultRequestHeaders.TransferEncodingChunked = false;
                });

                options.HttpMessageHandlerBuilderActions.Add(b =>
                {
                    HttpClientHandler handler        = new HttpClientHandler();
                    handler.UseCookies               = false;
                    handler.MaxAutomaticRedirections = 3;
                    handler.SslProtocols             = SslProtocols.None; //Let the OS handle the protocol to use
                    handler.UseProxy = factoryConfig.Value.UseProxy;
                    handler.Proxy    = factoryConfig.Value.Proxy;

                    b.PrimaryHandler = handler;
                });
            });

            return(builder);
        }
コード例 #4
0
        public static ICoreBuilder AddAutoRegistrationMediators(this ICoreBuilder builder,
                                                                IEnumerable <Assembly> assemblies)
        {
            builder.NotNull(nameof(builder));

            builder.Services.ConnectImplementationsToTypesClosing(assemblies,
                                                                  typeof(IRequestHandler <,>), false);
            builder.Services.ConnectImplementationsToTypesClosing(assemblies,
                                                                  typeof(INotificationHandler <>), true);
            builder.Services.ConnectImplementationsToTypesClosing(assemblies,
                                                                  typeof(IRequestPreProcessor <>), true);
            builder.Services.ConnectImplementationsToTypesClosing(assemblies,
                                                                  typeof(IRequestPostProcessor <,>), true);

            var multiOpenInterfaces = new[]
            {
                typeof(INotificationHandler <>),
                typeof(IRequestPreProcessor <>),
                typeof(IRequestPostProcessor <,>)
            };

            foreach (var multiOpenInterface in multiOpenInterfaces)
            {
                assemblies.InvokeTypes(type =>
                {
                    builder.Services.AddTransient(multiOpenInterface, type);
                },
                                       types => types
                                       .Where(type => Enumerable.Any(type.FindInterfacesThatClose(multiOpenInterface)))
                                       .Where(type => type.IsConcreteType() && type.IsOpenGenericType()));
            }

            return(builder);
        }
コード例 #5
0
    /// <summary>Add SimpleS3 services to a service collection.</summary>
    /// <param name="collection">The service collection</param>
    public static IClientBuilder AddAmazonS3(this IServiceCollection collection)
    {
        ICoreBuilder coreBuilder = SimpleS3CoreServices.AddSimpleS3Core(collection);

        coreBuilder.UseAmazonS3();

        IHttpClientBuilder httpBuilder = coreBuilder.UseHttpClientFactory();

        httpBuilder.UseDefaultHttpPolicy();

        coreBuilder.Services.AddSingleton(x =>
        {
            //We have to call a specific constructor for dependency injection
            IObjectClient objectClient           = x.GetRequiredService <IObjectClient>();
            IBucketClient bucketClient           = x.GetRequiredService <IBucketClient>();
            IMultipartClient multipartClient     = x.GetRequiredService <IMultipartClient>();
            IMultipartTransfer multipartTransfer = x.GetRequiredService <IMultipartTransfer>();
            ITransfer transfer = x.GetRequiredService <ITransfer>();
            ISignedObjectClient?signedObjectClient = x.GetRequiredService <ISignedObjectClient>();
            return(new AmazonS3Client(objectClient, bucketClient, multipartClient, multipartTransfer, transfer, signedObjectClient));
        });

        //Add the client as the interface too
        coreBuilder.Services.AddSingleton <ISimpleClient>(x => x.GetRequiredService <AmazonS3Client>());

        return(new ClientBuilder(collection, httpBuilder, coreBuilder));
    }
コード例 #6
0
ファイル: UnitTestBase.cs プロジェクト: Genbox/SimpleS3
    protected UnitTestBase(ITestOutputHelper outputHelper, string?profileName = null)
    {
        ProfileName = profileName;
        IConfigurationRoot configRoot = new ConfigurationBuilder()
                                        .AddJsonFile("Config.json", false)
                                        .Build();

        ServiceCollection collection = new ServiceCollection();

        collection.AddSingleton(configRoot);
        collection.Configure <SimpleS3Config>(configRoot);
        collection.Configure <SimpleS3Config>(ConfigureConfig);

        ICoreBuilder coreBuilder = SimpleS3CoreServices.AddSimpleS3Core(collection);

        ConfigureCoreBuilder(coreBuilder, configRoot);

        collection.AddLogging(x =>
        {
            x.AddConfiguration(configRoot.GetSection("Logging"));
            x.AddXUnit(outputHelper);
        });

        //A small hack to remove all validators, as we test them separately
        collection.RemoveAll(typeof(IValidator <>));

        ConfigureServices(collection);

        Services = collection.BuildServiceProvider();
    }
コード例 #7
0
        public static IHttpClientBuilder UseHttpClient(this ICoreBuilder clientBuilder, IOptions <HttpClientConfig> options = null)
        {
            CustomHttpClientBuilder builder = new CustomHttpClientBuilder(clientBuilder.Services);

            builder.Services.AddSingleton(x =>
            {
                HttpClientHandler handler        = new HttpClientHandler();
                handler.UseCookies               = false;
                handler.MaxAutomaticRedirections = 3;
                handler.SslProtocols             = SslProtocols.None; //Let the OS handle the protocol to use
                handler.UseProxy = options.Value.UseProxy;
                handler.Proxy    = options.Value.Proxy;
                return(handler);
            });

            builder.Services.AddSingleton(serviceProvider =>
            {
                System.Net.Http.HttpClient client = ActivatorUtilities.CreateInstance <System.Net.Http.HttpClient>(serviceProvider);
                client.DefaultRequestHeaders.TransferEncodingChunked = false;

                return(client);
            });

            builder.Services.AddSingleton <INetworkDriver, HttpClientNetworkDriver>();
            return(builder);
        }
コード例 #8
0
 public static void UserRedis(this ICoreBuilder coreBuilder, string connectionString)
 {
     coreBuilder.OnStarting(builder =>
     {
         builder.RegisterInstance(new RedisFactory(connectionString)).As <IRedisFactory>();
     });
 }
コード例 #9
0
    public static IHttpClientBuilder UseHttpClientFactory(this ICoreBuilder clientBuilder)
    {
        CustomHttpClientFactoryBuilder builder = new CustomHttpClientFactoryBuilder(clientBuilder.Services);

        //Contrary to the naming, this does not add a HttpClient to the services. It is the factories etc. necessary for HttpClientFactory to work.
        builder.Services.AddHttpClient();
        builder.Services.AddSingleton <INetworkDriver, HttpClientFactoryNetworkDriver>();

        builder.Services.Configure <HttpClientFactoryOptions>((options, services) =>
        {
            IOptions <HttpClientFactoryConfig> factoryConfig = services.GetRequiredService <IOptions <HttpClientFactoryConfig> >();
            options.HandlerLifetime = factoryConfig.Value.HandlerLifetime;

            options.HttpClientActions.Add(client =>
            {
                client.DefaultRequestHeaders.UserAgent.TryParseAdd(Constants.DefaultUserAgent);
                client.DefaultRequestHeaders.TransferEncodingChunked = false;
            });

            options.HttpMessageHandlerBuilderActions.Add(b =>
            {
                HttpClientHandler handler        = new HttpClientHandler();
                handler.UseCookies               = false;
                handler.MaxAutomaticRedirections = 3;
                handler.SslProtocols             = SslProtocols.None; //Let the OS handle the protocol to use
                handler.UseProxy = factoryConfig.Value.UseProxy;
                handler.Proxy    = factoryConfig.Value.Proxy;

                b.PrimaryHandler = handler;
            });
        });

        return(builder);
    }
コード例 #10
0
        public static IHttpClientBuilder UseHttpClient(this ICoreBuilder clientBuilder)
        {
            CustomHttpClientBuilder builder = new CustomHttpClientBuilder(clientBuilder.Services);

            builder.Services.AddSingleton <INetworkDriver, HttpClientNetworkDriver>(x =>
            {
                HttpClientHandler handler        = new HttpClientHandler();
                handler.UseCookies               = false;
                handler.MaxAutomaticRedirections = 3;
                handler.SslProtocols             = SslProtocols.None; //Let the OS handle the protocol to use

                IOptions <HttpClientConfig> options = x.GetService <IOptions <HttpClientConfig> >();

                if (options != null)
                {
                    handler.UseProxy = options.Value.UseProxy;
                    handler.Proxy    = options.Value.Proxy;
                }

                ILogger <HttpClientNetworkDriver> logger = x.GetRequiredService <ILogger <HttpClientNetworkDriver> >();

                System.Net.Http.HttpClient client = new System.Net.Http.HttpClient(handler);
                client.DefaultRequestHeaders.UserAgent.TryParseAdd(Constants.DefaultUserAgent);
                client.DefaultRequestHeaders.TransferEncodingChunked = false;

                return(new HttpClientNetworkDriver(logger, client));
            });

            return(builder);
        }
コード例 #11
0
 protected StatBuilderWithPool(
     IStatFactory statFactory, ICoreStatBuilder coreStatBuilder, ICoreBuilder <Pool> pool, string identitySuffix)
     : base(statFactory, coreStatBuilder)
 {
     Pool            = pool;
     _identitySuffix = identitySuffix;
 }
コード例 #12
0
 protected override void ConfigureCoreBuilder(ICoreBuilder builder)
 {
     builder.UseHttpClientFactory()
     .ConfigurePrimaryHttpMessageHandler(() => _handler)
     .UseRetryPolicy(3, attempt => TimeSpan.Zero)
     // Set an extraordinary timeout
     .UseTimeoutPolicy(TimeSpan.FromSeconds(3));
 }
コード例 #13
0
 private SkillBuilderCollection(
     IStatFactory statFactory, ICoreBuilder <IEnumerable <Keyword> > coreBuilder,
     IEnumerable <SkillDefinition> skills)
 {
     _statFactory = statFactory;
     _coreBuilder = coreBuilder;
     _skills      = skills;
 }
コード例 #14
0
 public static ICoreBuilder UsePooledClients(this ICoreBuilder builder)
 {
     builder.Services.Replace(ServiceDescriptor.Singleton <IBucketClient, PooledBucketClient>());
     builder.Services.Replace(ServiceDescriptor.Singleton <IObjectClient, PooledObjectClient>());
     builder.Services.Replace(ServiceDescriptor.Singleton <IMultipartClient, PooledMultipartClient>());
     builder.Services.Replace(ServiceDescriptor.Singleton <ISignedObjectClient, PooledSignedObjectClient>());
     return(builder);
 }
コード例 #15
0
 private SkillBuilderCollection(
     IStatFactory statFactory, ICoreBuilder <IEnumerable <Keyword> > coreBuilder,
     Func <IEnumerable <Keyword>, IEnumerable <string> > selectSkills)
 {
     _statFactory  = statFactory;
     _coreBuilder  = coreBuilder;
     _selectSkills = selectSkills;
 }
コード例 #16
0
    protected override void ConfigureCoreBuilder(ICoreBuilder coreBuilder, IConfigurationRoot configuration)
    {
        coreBuilder.UseHttpClientFactory()
        .ConfigurePrimaryHttpMessageHandler(() => _handler)
        .UseRetryPolicy(3, attempt => TimeSpan.Zero);

        base.ConfigureCoreBuilder(coreBuilder, configuration);
    }
コード例 #17
0
 protected StatBuilderWithPool(IStatFactory statFactory, ICoreBuilder <Pool> pool, string identitySuffix)
     : this(statFactory,
            new CoreStatBuilderFromCoreBuilder <Pool>(pool,
                                                      (e, p) => statFactory.FromIdentity(p.ToString() + identitySuffix, e, typeof(int))),
            pool,
            identitySuffix)
 {
 }
コード例 #18
0
 public CoreStatBuilderFromCoreBuilder(
     ICoreBuilder <T> coreBuilder,
     StatFactory statFactory,
     IEntityBuilder entityBuilder = null)
 {
     _coreBuilder   = coreBuilder;
     _statFactory   = statFactory;
     _entityBuilder = entityBuilder ?? new ModifierSourceEntityBuilder();
 }
コード例 #19
0
        private IEnumerable <IStat> ConvertStat(BuildParameters parameters, ICoreBuilder <string> identity, IStat stat)
        {
            var builtIdentity = identity.Build(parameters);

            return(from e in Entity.Build(stat.Entity)
                   let i = $"On({builtIdentity}).By({e})"
                           let registrationType = GainOnAction(stat, builtIdentity, e)
                                                  select StatFactory.CopyWithSuffix(stat, i, stat.DataType, registrationType));
        }
コード例 #20
0
        protected OnlineTestBase(ITestOutputHelper outputHelper)
        {
            ConfigurationBuilder configBuilder = new ConfigurationBuilder();

            configBuilder.AddJsonFile("Config.json", false);

            //Set the configuration from the config file
            IConfigurationRoot configRoot = configBuilder.Build();

            ServiceCollection collection = new ServiceCollection();

            ICoreBuilder coreBuilder = collection.AddSimpleS3Core(config =>
            {
                //Set the configuration from the config file
                configRoot.Bind(config);
            });

            string profileName = configRoot["ProfileName"];

            coreBuilder.UseProfileManager()
            .BindConfigToProfile(profileName)
            .UseDataProtection();

            IHttpClientBuilder httpBuilder = coreBuilder.UseHttpClientFactory();

            httpBuilder.UseTimeoutPolicy(TimeSpan.FromMinutes(10));

            IConfigurationSection proxySection = configRoot.GetSection("Proxy");

            if (proxySection != null && proxySection["UseProxy"].Equals("true", StringComparison.OrdinalIgnoreCase))
            {
                httpBuilder.WithProxy(proxySection["ProxyAddress"]);
            }

            collection.AddLogging(x =>
            {
                x.AddConfiguration(configRoot.GetSection("Logging"));
                x.AddXUnit(outputHelper);
            });

            //A small hack to remove all validators, as we test them separately
            collection.RemoveAll(typeof(IValidator <>));
            collection.RemoveAll <IValidator>();

            _services = collection.BuildServiceProvider();

            BucketName = configRoot["BucketName"] ?? "main-test-bucket-2019";

            ObjectClient       = _services.GetRequiredService <IObjectClient>();
            BucketClient       = _services.GetRequiredService <IBucketClient>();
            MultipartClient    = _services.GetRequiredService <IMultipartClient>();
            Transfer           = _services.GetRequiredService <Fluent.Transfer>();
            SignedObjectClient = _services.GetRequiredService <ISignedObjectClient>();
        }
コード例 #21
0
        public static IHttpClientBuilder UseHttpClientFactory(this ICoreBuilder clientBuilder, Action <HttpClientFactoryConfig> config = null)
        {
            CustomHttpClientFactoryBuilder builder = new CustomHttpClientFactoryBuilder(clientBuilder.Services);

            builder.Services.AddHttpClient(); //Contrary to the naming, this does not add a HttpClient to the services. It is the factories etc. necessary for HttpClientFactory to work.

            builder.Services.AddSingleton <IConfigureOptions <HttpClientFactoryOptions> >(x =>
            {
                return(new ConfigureNamedOptions <HttpClientFactoryOptions>(builder.Name, options =>
                {
                    IOptions <HttpClientFactoryConfig> o = x.GetService <IOptions <HttpClientFactoryConfig> >();
                    options.HandlerLifetime = o.Value.HandlerLifetime;

                    options.HttpClientActions.Add(client =>
                    {
                        client.DefaultRequestHeaders.UserAgent.TryParseAdd(Constants.DefaultUserAgent);
                        client.DefaultRequestHeaders.TransferEncodingChunked = false;
                    });
                }));
            });

            if (config != null)
            {
                builder.Services.Configure(config);
            }

            builder.Services.AddSingleton(x =>
            {
                IHttpClientFactory httpClientFactory = x.GetRequiredService <IHttpClientFactory>();
                return(httpClientFactory.CreateClient("SimpleS3"));
            });

            builder.Services.AddSingleton <INetworkDriver, HttpClientFactoryNetworkDriver>();

            builder.Services.AddSingleton(x =>
            {
                IOptions <HttpClientFactoryConfig> options = x.GetService <IOptions <HttpClientFactoryConfig> >();

                HttpClientHandler handler        = new HttpClientHandler();
                handler.UseCookies               = false;
                handler.MaxAutomaticRedirections = 3;
                handler.SslProtocols             = SslProtocols.None;

                if (options != null)
                {
                    handler.UseProxy = options.Value.UseProxy;
                    handler.Proxy    = options.Value.Proxy;
                }

                return(handler);
            });

            return(builder);
        }
コード例 #22
0
        /// <summary>Add SimpleS3 services to a service collection.</summary>
        /// <param name="collection">The service collection</param>
        public static IS3ClientBuilder AddSimpleS3(this IServiceCollection collection)
        {
            ICoreBuilder coreBuilder = collection.AddSimpleS3Core();

            coreBuilder.UseS3Client();

            IHttpClientBuilder httpBuilder = coreBuilder.UseHttpClientFactory();

            httpBuilder.UseDefaultHttpPolicy();

            return(new S3ClientBuilder(collection, httpBuilder, coreBuilder));
        }
コード例 #23
0
    public static ICoreBuilder UseAmazonS3(this ICoreBuilder clientBuilder)
    {
        clientBuilder.Services.AddSingleton <IRegionData, AmazonS3RegionData>();
        clientBuilder.Services.AddSingleton <IInputValidator, AmazonS3InputValidator>();

        clientBuilder.Services.PostConfigure <SimpleS3Config>((x, y) =>
        {
            IOptions <AmazonS3Config> awsCfg = y.GetRequiredService <IOptions <AmazonS3Config> >();
            PropertyHelper.MapObjects(awsCfg.Value, x);
        });

        return(clientBuilder);
    }
コード例 #24
0
    /// <summary>Adds a profile manager that is configured to use the disk for storage and JSON for serialization</summary>
    public static IProfileManagerBuilder UseProfileManager(this ICoreBuilder builder, Action <DiskStorageOptions>?config = null)
    {
        builder.Services.AddSingleton <IProfileSetup, ConsoleProfileSetup>();
        builder.Services.AddSingleton <IProfileManager, ProfileManager>();
        builder.Services.AddSingleton <IStorage, DiskStorage>();
        builder.Services.AddSingleton <IProfileSerializer, JsonProfileSerializer>();

        if (config != null)
        {
            builder.Services.Configure(config);
        }

        return(new ProfileManagerBuilder(builder.Services));
    }
コード例 #25
0
        public static ICoreBuilder UseS3Client(this ICoreBuilder builder)
        {
            builder.Services.TryAddSingleton(x =>
            {
                //We have to call a specific constructor for dependency injection
                IObjectClient objectClient       = x.GetRequiredService <IObjectClient>();
                IBucketClient bucketClient       = x.GetRequiredService <IBucketClient>();
                IMultipartClient multipartClient = x.GetRequiredService <IMultipartClient>();
                return(new S3Client(objectClient, bucketClient, multipartClient));
            });

            //Add the client as the interface too
            builder.Services.TryAddSingleton <IClient>(x => x.GetRequiredService <S3Client>());
            return(builder);
        }
コード例 #26
0
        /// <summary>Add SimpleS3 services to a service collection.</summary>
        /// <param name="collection">The service collection</param>
        public static IS3ClientBuilder AddSimpleS3(this IServiceCollection collection)
        {
            S3ClientBuilder builder = new S3ClientBuilder(collection);

            ICoreBuilder clientBuilder = collection.AddSimpleS3Core();

            clientBuilder.UseS3Client();
            builder.CoreBuilder = clientBuilder;

            IHttpClientBuilder httpBuilder = clientBuilder.UseHttpClientFactory();

            httpBuilder.UseDefaultHttpPolicy();
            builder.HttpBuilder = httpBuilder;

            return(builder);
        }
コード例 #27
0
        public static S3Client Create(string keyId, string accessKey, AwsRegion region, IWebProxy?proxy = null)
        {
            //In this example we are using using Microsoft's Dependency Injection (DI) framework
            ServiceCollection services = new ServiceCollection();

            //We use Microsoft.Extensions.Configuration framework here to load our config file
            ConfigurationBuilder configBuilder = new ConfigurationBuilder();

            configBuilder.AddJsonFile("Config.json", false);
            IConfigurationRoot root = configBuilder.Build();

            //We use Microsoft.Extensions.Logging here to add support for logging
            services.AddLogging(x =>
            {
                x.AddConsole();
                x.AddConfiguration(root.GetSection("Logging"));
            });

            //Here we bind the configuration from above to S3Config, which is automatically used by SimpleS3
            services.Configure <S3Config>(root);

            //Here we create a core client without a network driver
            ICoreBuilder coreBuilder = services.AddSimpleS3Core(s3Config =>
            {
                s3Config.Credentials = new StringAccessKey(keyId, accessKey);
                s3Config.Region      = region;

                //Note that you can also override other configuration values here, even if they were bound to something else above. The values here take precedence.
            });

            //The default client is HttpClientFactory, but to show how we can change this, we use HttpClient here.
            IHttpClientBuilder httpBuilder = coreBuilder.UseHttpClient();

            if (proxy != null)
            {
                httpBuilder.WithProxy(proxy);
            }

            //This adds the S3Client service. This service combines ObjectClient, MultipartClient and BucketClient into a single client. Makes it easier for new people to use the library.
            coreBuilder.UseS3Client();

            //Finally we build the service provider and return the S3Client
            IServiceProvider serviceProvider = services.BuildServiceProvider();

            return(serviceProvider.GetRequiredService <S3Client>());
        }
コード例 #28
0
ファイル: Program.cs プロジェクト: Genbox/SimpleS3
    private static ISimpleClient BuildClient(IWebProxy?proxy = null)
    {
        //Create the dependency injection container
        ServiceCollection services = new ServiceCollection();

        //We use Microsoft.Extensions.Logging to log to the console
        services.AddLogging(x => x.AddConsole());

        //Here we create a core client. It has no network driver at this point.
        ICoreBuilder coreBuilder = SimpleS3CoreServices.AddSimpleS3Core(services);

        //We want to use HttpClientFactory as the HTTP driver
        IHttpClientBuilder httpBuilder = coreBuilder.UseHttpClientFactory();

        //Add a default timeout and retry policy
        httpBuilder.UseDefaultHttpPolicy();

        //If you set a proxy, this is where it gets added
        if (proxy != null)
        {
            httpBuilder.UseProxy(proxy);
        }

        //This adds the S3Client service. This service combines ObjectClient, MultipartClient and BucketClient into a single client. Makes it easier for new people to use the library.
        coreBuilder.UseAmazonS3();

        //Here we add the profile manager. It is a profile system that persist your credentials to disk in a very secure way.
        coreBuilder.UseProfileManager()
        .BindConfigToDefaultProfile() //We can either name the profile (so you can have more than one) or use the default one.
        .UseConsoleSetup();           //This adds a service that ask you to setup your profile if it does not exist.

        //Finally we build the service provider and return the S3Client
        IServiceProvider serviceProvider = services.BuildServiceProvider();

        IProfileManager profileManager = serviceProvider.GetRequiredService <IProfileManager>();
        IProfile?       profile        = profileManager.GetDefaultProfile();

        if (profile == null)
        {
            IProfileSetup setup = serviceProvider.GetRequiredService <IProfileSetup>();
            setup.SetupDefaultProfile();
        }

        return(serviceProvider.GetRequiredService <ISimpleClient>());
    }
コード例 #29
0
ファイル: OfflineTestBase.cs プロジェクト: DaveCS1/SimpleS3
        protected OfflineTestBase(ITestOutputHelper outputHelper)
        {
            ConfigurationBuilder configBuilder = new ConfigurationBuilder();

            configBuilder.AddJsonFile("Config.json", false);

            ServiceCollection collection = new ServiceCollection();

            //Set the configuration from the config file
            _configRoot = configBuilder.Build();

            ICoreBuilder coreBuilder = collection.AddSimpleS3Core(config =>
            {
                //Set the configuration from the config file
                _configRoot.Bind(config);
                config.Region      = AwsRegion.EuWest1;
                config.Credentials = new StringAccessKey("AKIAIOSFODNN7EXAMPLE", "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY");

                ConfigureConfig(config);
            });

            ConfigureCoreBuilder(coreBuilder);

            collection.TryAddSingleton <INetworkDriver, NullNetworkDriver>();

            collection.AddLogging(x =>
            {
                x.AddConfiguration(_configRoot.GetSection("Logging"));
                x.AddXUnit(outputHelper);
            });

            ConfigureServices(collection);

            Services = collection.BuildServiceProvider();

            BucketName = _configRoot["BucketName"] ?? "main-test-bucket-2019";

            Config                    = Services.GetRequiredService <IOptions <S3Config> >().Value;
            ObjectClient              = Services.GetRequiredService <IObjectClient>();
            BucketClient              = Services.GetRequiredService <IBucketClient>();
            MultipartClient           = Services.GetRequiredService <IMultipartClient>();
            Transfer                  = Services.GetRequiredService <Transfer>();
            PreSignedObjectOperations = Services.GetRequiredService <IPreSignedObjectOperations>();
        }
コード例 #30
0
ファイル: ClientBase.cs プロジェクト: Genbox/SimpleS3
    protected internal ClientBase(IInputValidator inputValidator, SimpleS3Config config, IWebProxy?proxy = null)
    {
        ServiceCollection services = new ServiceCollection();

        services.AddSingleton(inputValidator);
        services.AddSingleton(Options.Create(config));
        services.AddLogging();

        ICoreBuilder builder = SimpleS3CoreServices.AddSimpleS3Core(services);

        IHttpClientBuilder httpBuilder = builder.UseHttpClientFactory();

        if (proxy != null)
        {
            httpBuilder.UseProxy(proxy);
        }

        Build(services);
    }