/// <summary> /// Adds support for ZipArchive /// <para>Can create a deserializer for supplied mime types for zip archives</para> /// </summary> /// <param name="builder">The setup</param> /// <param name="mode">ZipArhive mode</param> /// <param name="additionalMimeTypes">Additional MimeTypes for the deserializer, the default one is application/zip</param> /// <returns>ISolidHttpCoreBuilder</returns> public static ISolidHttpCoreBuilder AddZip(this ISolidHttpCoreBuilder builder, ZipArchiveMode mode = ZipArchiveMode.Read, params string[] additionalMimeTypes) { var provider = new ZipArchiveSerializerSettingsProvider(mode); builder.Services.AddSingleton <IZipSerializerSettingsProvider>(provider); builder.Services.AddSolidHttpDeserializer <ZipArchiveResponseDeserializerFactory>("application/zip", additionalMimeTypes); return(builder); }
/// <summary> /// Adds a deserializer factory used to deserialize the specified mime types /// </summary> /// <param name="builder">The extended ISolidHttpBuilder</param> /// <param name="factory">The deserializer factory instance</param> /// <param name="mimeType">The mime type to deserialize</param> /// <param name="more">More mime types</param> /// <returns>ISolidHttpBuilder</returns> public static ISolidHttpCoreBuilder AddDeserializer(this ISolidHttpCoreBuilder builder, IResponseDeserializerFactory factory, string mimeType, params string[] more) { builder.Services.AddSingleton <IDeserializer>(new Deserializer(mimeType, factory)); foreach (var mime in more) { builder.Services.AddSingleton <IDeserializer>(new Deserializer(mime, factory)); } return(builder); }
/// <summary> /// Adds a deserializer factory used to deserialize the specified mime types /// </summary> /// <typeparam name="TFactory">The deserializer factory type</typeparam> /// <param name="builder">The extended ISolidHttpBuilder</param> /// <param name="mimeType">The mime type to deserialize</param> /// <param name="more">More mime types</param> /// <returns>ISolidHttpBuilder</returns> public static ISolidHttpCoreBuilder AddDeserializer <TFactory>(this ISolidHttpCoreBuilder builder, string mimeType, params string[] more) where TFactory : class, IResponseDeserializerFactory { builder.Services.AddSingleton <TFactory>(); builder.Services.AddSingleton <IDeserializer>(p => new Deserializer <TFactory>(mimeType, p.GetRequiredService <TFactory>())); foreach (var mime in more) { builder.Services.AddSingleton <IDeserializer>(p => new Deserializer <TFactory>(mime, p.GetRequiredService <TFactory>())); } return(builder); }
/// <summary> /// Configures Solid.Http to use a custom HttpClientProvider /// </summary> /// <typeparam name="TProvider">The custom HttpClientProvider type</typeparam> /// <param name="builder">The extended ISolidHttpBuilder</param> /// <param name="instance">The HttpClientFactory instance</param> /// <returns>ISolidHttpBuilder</returns> public static ISolidHttpCoreBuilder UseHttpClientProvider <TProvider>(this ISolidHttpCoreBuilder builder, TProvider instance) where TProvider : HttpClientProvider { var descriptor = builder.Services.FirstOrDefault(d => d.ServiceType == typeof(IHttpClientProvider)); if (descriptor != null) { builder.Services.Remove(descriptor); } builder.Services.AddSingleton <IHttpClientProvider>(instance); return(builder); }
private static ISolidHttpCoreBuilder On <T>(this ISolidHttpCoreBuilder builder, Func <IServiceProvider, T, Task> func) { if (func == null) { return(builder); } var descriptor = builder.Services.First(d => d.ServiceType == typeof(SolidAsyncEventHandler <T>)); ((SolidAsyncEventHandler <T>)descriptor.ImplementationInstance).Handler += func; return(builder); }
private static ISolidHttpCoreBuilder On <T>(this ISolidHttpCoreBuilder builder, Action <IServiceProvider, T> action) { if (action == null) { return(builder); } var descriptor = builder.Services.First(d => d.ServiceType == typeof(SolidEventHandler <T>)); ((SolidEventHandler <T>)descriptor.ImplementationInstance).Handler += action; return(builder); }
/// <summary> /// Adds json support using supplied settings /// <para>Can create a deserializer for application/json, text/json, and text/javascript</para> /// </summary> /// <param name="builder">The builder</param> /// <param name="settings">Supplied JsonSerializerSettings</param> /// <returns>ISolidHttpCoreBuilder</returns> public static ISolidHttpCoreBuilder AddJson(this ISolidHttpCoreBuilder builder, JsonSerializerSettings settings) { var provider = new JsonSerializerSettingsProvider(settings); builder.Services.AddSingleton <IJsonSerializerSettingsProvider>(provider); builder.AddDeserializer <JsonResponseDeserializerFactory>("application/json", "text/json", "text/javascript"); return(builder .OnRequestCreated((services, request) => { var p = services.GetRequiredService <IJsonSerializerSettingsProvider>(); request.BaseRequest.Properties.Add("JsonSerializerSettings", p.GetJsonSerializerSettings()); })); }
public static ISolidHttpCoreBuilder AddSharpCompress(this ISolidHttpCoreBuilder builder, SharpCompressOptions options = default(SharpCompressOptions)) { options = options ?? new SharpCompressOptions(); if (options.MimeTypes.Count < 1) { throw new ArgumentException("You have to have at least one mimetype specified"); } var provider = new SharpCompressSerializerSettingsProvider(options); builder.Services.AddSingleton <ISharpCompressSerializerSettingsProvider>(provider); var mimeTypeTail = options.MimeTypes.GetRange(1, options.MimeTypes.Count - 1); builder.Services.AddSolidHttpDeserializer <SharpCompressResponseDeserializerFactory>(options.MimeTypes[0], mimeTypeTail.ToArray()); return(builder); }
/// <summary> /// Adds xml support using supplied settings /// <para>Can create a deserializer for application/xml and text/xml</para> /// </summary> /// <param name="builder">The setup</param> /// <param name="settings">Supplied XmlSerializerSettings</param> /// <returns>ISolidHttpSetup</returns> public static ISolidHttpCoreBuilder AddXml(this ISolidHttpCoreBuilder builder, DataContractSerializerSettings settings) { var provider = new XmlSerializerSettingsProvider(settings); builder.Services.AddSingleton <IXmlSerializerSettingsProvider>(provider); builder.Services.AddSolidHttpDeserializer <XmlResponseDeserializerFactory>("application/xml", "text/xml"); return(builder .AddSolidHttpCoreOptions(options => { options.Events.OnRequestCreated += (sender, args) => { var p = args.Services.GetRequiredService <IXmlSerializerSettingsProvider>(); args.Request.BaseRequest.Properties.Add("XmlSerializerSettings", p.GetXmlSerializerSettings()); }; })); }
public static ISolidHttpCoreBuilder AddExceptionMappings(this ISolidHttpCoreBuilder builder, ExceptionMappingOptions options = default(ExceptionMappingOptions)) { options = options ?? new ExceptionMappingOptions(); /*builder.Services.AddSingleton<SolidHttpExceptionMapper<SolidHttpRequestException>>(new SolidHttpDefaultExceptionMapper()); * builder.Services.AddSingleton<SolidHttpExceptionMapper<SolidHttpRequestModelException>>(new SolidHttpModelExceptionMapper());*/ builder.Services.AddSingleton <IExceptionMapper>(new SolidHttpDefaultExceptionMapper()); builder.Services.AddSingleton <IExceptionMapper>(new SolidHttpModelExceptionMapper()); var provider = new ExceptionMappingSettingsProvider(options); builder.Services.AddSingleton <IExceptionMappingSettingsProvider>(provider); foreach (var mapper in options.Mappers) { builder.Services.AddSingleton(mapper); } return(builder); }
/// <summary> /// Adds support for ZipArchive /// <para>Can create a deserializer for application/zip</para> /// </summary> /// <param name="builder">The setup</param> /// <param name="additionalMimeTypes">Additional zip mime types</param> /// <returns>ISolidHttpBuilder</returns> public static ISolidHttpCoreBuilder AddZip(this ISolidHttpCoreBuilder builder, params string[] additionalMimeTypes) => builder.AddZip(ZipArchiveMode.Read, additionalMimeTypes);
public SolidHttpBuilder(ISolidHttpCoreBuilder core) : base(core) { }
/// <summary> /// Adds json support using default settings /// </summary> /// <param name="builder">The builder</param> /// <returns>ISolidHttpCoreBuilder</returns> public static ISolidHttpCoreBuilder AddJson(this ISolidHttpCoreBuilder builder) { var settings = new JsonSerializerSettings(); return(builder.AddJson(settings)); }
public SolidHttpBuilder(ISolidHttpCoreBuilder core) { _core = core; }
/// <summary> /// Add a global handler to be run when every Solid.Http request object is created. /// </summary> /// <param name="builder">The extended ISolidHttpBuilder</param> /// <param name="action">The handler to be run</param> /// <returns>The builder</returns> public static ISolidHttpCoreBuilder OnRequestCreated(this ISolidHttpCoreBuilder builder, Action <ISolidHttpRequest> action) => builder.OnRequestCreated((_, c) => action(c));
/// <summary> /// Add a globa /// <param name="builder">The extended ISolidHttpBuilder</param>l handler to be run the moment every response is received /// </summary> /// <param name="func">The handler to be run</param> /// <returns>The builder</returns> public static ISolidHttpCoreBuilder OnResponse(this ISolidHttpCoreBuilder builder, Func <HttpResponseMessage, Task> func) => builder.OnResponse((_, c) => func(c));
/// <summary> /// Configures Solid.Http to use one HttpClient for the whole application /// </summary> /// <param name="builder">The extended ISolidHttpBuilder</param> /// <returns>ISolidHttpBuilder</returns> public static ISolidHttpCoreBuilder UseSingleInstanceHttpClientProvider(this ISolidHttpCoreBuilder builder) => builder.UseHttpClientProvider <SingleInstanceHttpClientProvider>();
/// <summary> /// Add a global handler to be run when every Solid.Http request object is created. /// </summary> /// <param name="builder">The extended ISolidHttpBuilder</param> /// <param name="action">The handler to be run</param> /// <returns>The builder</returns> public static ISolidHttpCoreBuilder OnRequestCreated(this ISolidHttpCoreBuilder builder, Action <IServiceProvider, ISolidHttpRequest> action) => builder.On(action);
/// <summary> /// Add a global handler to be run just before every request is sent /// </summary> /// <param name="builder">The extended ISolidHttpBuilder</param> /// <param name="action">The handler to be run</param> /// <returns>The builder</returns> public static ISolidHttpCoreBuilder OnRequest(this ISolidHttpCoreBuilder builder, Action <HttpRequestMessage> action) => builder.OnRequest((_, c) => action(c));
/// <summary> /// Adds xml support using default settings /// </summary> /// <param name="builder">The builder</param> /// <returns>ISolidHttpSetup</returns> public static ISolidHttpCoreBuilder AddXml(this ISolidHttpCoreBuilder builder) { var settings = new DataContractSerializerSettings(); return(builder.AddXml(settings)); }
/// <summary> /// Add a global handler to be run the moment every response is received /// </summary> /// <param name="builder">The extended ISolidHttpBuilder</param> /// <param name="action">The handler to be run</param> /// <returns>The builder</returns> public static ISolidHttpCoreBuilder OnResponse(this ISolidHttpCoreBuilder builder, Action <HttpResponseMessage> action) => builder.OnResponse((_, c) => action(c));
/// <summary> /// Add a global handler to be run the moment every response is received /// </summary> /// <param name="builder">The extended ISolidHttpBuilder</param> /// <param name="func">The handler to be run</param> /// <returns>The builder</returns> public static ISolidHttpCoreBuilder OnResponse(this ISolidHttpCoreBuilder builder, Func <IServiceProvider, HttpResponseMessage, Task> func) => builder.On(func);
/// <summary> /// Adds support for ZipArchive /// <para>Can create a deserializer for application/zip</para> /// </summary> /// <param name="builder">The setup</param> /// <param name="mode">The zip archive mode</param> /// <param name="additionalMimeTypes">Additional zip mime types</param> /// <returns>ISolidHttpBuilder</returns> public static ISolidHttpCoreBuilder AddZip(this ISolidHttpCoreBuilder builder, ZipArchiveMode mode, params string[] additionalMimeTypes) => ((ISolidHttpBuilder)builder).AddZip(mode, additionalMimeTypes) as ISolidHttpCoreBuilder;
/// <summary> /// Configures Solid.Http to use one HttpClient for each host requested. /// </summary> /// <param name="builder">The extended ISolidHttpBuilder</param> /// <returns>ISolidHttpBuilder</returns> public static ISolidHttpCoreBuilder UseInstancePerHostHttpClientProvider(this ISolidHttpCoreBuilder builder) => builder.UseHttpClientProvider <InstancePerHostHttpClientProvider>();
/// <summary> /// Add a global handler to be run the moment every response is received /// </summary> /// <param name="builder">The extended ISolidHttpBuilder</param> /// <param name="action">The handler to be run</param> /// <returns>The builder</returns> public static ISolidHttpCoreBuilder OnResponse(this ISolidHttpCoreBuilder builder, Action <IServiceProvider, HttpResponseMessage> action) => builder.OnResponse(action.ToAsyncFunc());