/// <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); }
public BinaryOperatorCoreBuilder( ICoreBuilder <TResult> left, ICoreBuilder <TResult> right, Func <TResult, TResult, TResult> @operator) { _left = left; _right = right; _operator = @operator; }
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); }
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); }
/// <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)); }
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(); }
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); }
public static void UserRedis(this ICoreBuilder coreBuilder, string connectionString) { coreBuilder.OnStarting(builder => { builder.RegisterInstance(new RedisFactory(connectionString)).As <IRedisFactory>(); }); }
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); }
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); }
protected StatBuilderWithPool( IStatFactory statFactory, ICoreStatBuilder coreStatBuilder, ICoreBuilder <Pool> pool, string identitySuffix) : base(statFactory, coreStatBuilder) { Pool = pool; _identitySuffix = identitySuffix; }
protected override void ConfigureCoreBuilder(ICoreBuilder builder) { builder.UseHttpClientFactory() .ConfigurePrimaryHttpMessageHandler(() => _handler) .UseRetryPolicy(3, attempt => TimeSpan.Zero) // Set an extraordinary timeout .UseTimeoutPolicy(TimeSpan.FromSeconds(3)); }
private SkillBuilderCollection( IStatFactory statFactory, ICoreBuilder <IEnumerable <Keyword> > coreBuilder, IEnumerable <SkillDefinition> skills) { _statFactory = statFactory; _coreBuilder = coreBuilder; _skills = skills; }
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); }
private SkillBuilderCollection( IStatFactory statFactory, ICoreBuilder <IEnumerable <Keyword> > coreBuilder, Func <IEnumerable <Keyword>, IEnumerable <string> > selectSkills) { _statFactory = statFactory; _coreBuilder = coreBuilder; _selectSkills = selectSkills; }
protected override void ConfigureCoreBuilder(ICoreBuilder coreBuilder, IConfigurationRoot configuration) { coreBuilder.UseHttpClientFactory() .ConfigurePrimaryHttpMessageHandler(() => _handler) .UseRetryPolicy(3, attempt => TimeSpan.Zero); base.ConfigureCoreBuilder(coreBuilder, configuration); }
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) { }
public CoreStatBuilderFromCoreBuilder( ICoreBuilder <T> coreBuilder, StatFactory statFactory, IEntityBuilder entityBuilder = null) { _coreBuilder = coreBuilder; _statFactory = statFactory; _entityBuilder = entityBuilder ?? new ModifierSourceEntityBuilder(); }
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)); }
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>(); }
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); }
/// <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)); }
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); }
/// <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)); }
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); }
/// <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); }
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>()); }
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>()); }
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>(); }
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); }