using Slim.Resolvers; using System.Linq; using System.Net.Http; namespace System.Http { public sealed class HttpClientResolver : IDependencyResolver { private static readonly Type clientType = typeof(HttpClient<>); /// /// Factory method. parameter of the factory is the scope of . /// public Func HttpMessageHandlerFactory { get; set; } /// /// Sets the . /// /// Factory method. parameter of the factory is the scope of . /// public HttpClientResolver WithHttpMessageHandlerFactory(Func factory) { this.HttpMessageHandlerFactory = factory; return this; } public bool CanResolve(Type type) { if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(IHttpClient<>)) { return true; } return false; } public object Resolve(Slim.IServiceProvider serviceProvider, Type type) { var typedClientType = clientType.MakeGenericType(type.GetGenericArguments()); var handler = this.HttpMessageHandlerFactory?.Invoke(serviceProvider, type.GetGenericArguments().First()); var httpClient = handler is null ? Activator.CreateInstance(typedClientType) : Activator.CreateInstance(typedClientType, new object[] { handler }); return httpClient; } } }