private static void Run_UsingUnityDI(string[] args) { using (var container = new Unity.UnityContainer().EnableDiagnostic()) { string environment = Settings.Environment(); string notificationRecipientList = Settings.NotificationRecipientList(); string sendEmailGateway = Settings.SendEmailGateway(); // -- httpclientfactory Microsoft.Extensions.DependencyInjection.ServiceCollection serviceCollection = new Microsoft.Extensions.DependencyInjection.ServiceCollection(); serviceCollection.AddHttpClient("Sender", (c) => { c.BaseAddress = new Uri(sendEmailGateway); }); serviceCollection.BuildServiceProvider(container); //var httpClientFactory = serviceProvider.GetService<IHttpClientFactory>(); IHttpClientFactory clientFactory = container.Resolve <IHttpClientFactory>(); HttpClient httpClient = clientFactory.CreateClient("Sender"); container.RegisterSingleton <IConfig, AppConfig>( new InjectionProperty("Environment", environment) , new InjectionProperty("NotificationRecipientList", notificationRecipientList) , new InjectionProperty("SendEmailGateway", sendEmailGateway) ); container.RegisterSingleton <ILogger, Logger>(); //Sender(IConfig config, IHttpClientFactory httpClientFactory, ILogger logger) /* * container.RegisterSingleton<ISender, Sender>( * new InjectionConstructor( * new ResolvedParameter(typeof(IConfig)) * , new ResolvedParameter(typeof(IHttpClientFactory)) * , new ResolvedParameter(typeof(ILogger)) * ) * );*/ container.RegisterSingleton <ISender, Sender>(); container.RegisterType(typeof(RemoteAppenderSink)); var sink = container.Resolve <RemoteAppenderSink>(); //sink.EventsReached += (s, a) => AddLog(a.LoggingEvents); RemotingConfiguration.Configure("log4netListener.exe.config", false); RemotingServices.Marshal(sink, "RemoteAppenderLoggingSink"); } }
public async Task AddPolicyHandler_PolicySelector_AddsPolicyHandler() { var serviceCollection = new ServiceCollection(); HttpMessageHandlerBuilder builder = null; // Act1 serviceCollection.AddHttpClient("example.com", c => c.BaseAddress = new Uri("http://example.com")) .AddPolicyHandler((req) => req.RequestUri.AbsolutePath == "/" ? RetryPolicy : NoOpPolicy) .ConfigureHttpMessageHandlerBuilder(b => { b.PrimaryHandler = PrimaryHandler; builder = b; }); var services = serviceCollection.BuildServiceProvider(); var factory = services.GetRequiredService <IHttpClientFactory>(); // Act2 var client = factory.CreateClient("example.com"); // Assert Assert.NotNull(client); Assert.Collection( builder.AdditionalHandlers, h => Assert.IsType <LoggingScopeHttpMessageHandler>(h), h => Assert.IsType <PolicyHttpMessageHandler>(h), h => Assert.IsType <LoggingHttpMessageHandler>(h)); // Act 3 var response = await client.SendAsync(new HttpRequestMessage()); // Assert Assert.Equal(HttpStatusCode.Created, response.StatusCode); // Act 4 await Assert.ThrowsAsync <OverflowException>(() => client.SendAsync(new HttpRequestMessage(HttpMethod.Get, "/throw"))); }
public (IContainer resolver, ILog logToConsole) GetResolver(string horizonUrl, string passPhrase) { ContainerBuilder containerBuilder = new ContainerBuilder(); IServiceCollection collection = new Microsoft.Extensions.DependencyInjection.ServiceCollection(); var consoleLogger = LogFactory.Create(); consoleLogger.AddConsole(options => { options.IncludeScopes = true; }); var log = consoleLogger.CreateLog(this); collection.AddSingleton <ILog>(log); collection.AddHttpClient(); containerBuilder.RegisterType <HorizonService>() .As <IHorizonService>() .WithParameter("network", passPhrase) .WithParameter("horizonUrl", horizonUrl) .SingleInstance(); containerBuilder.Populate(collection); var resolver = containerBuilder.Build(); return(resolver, log); }
[Fact] // Verifies that AddHttpClient does not override any existing registration public void AddHttpClient_DoesNotRegisterDefaultClientIfAlreadyRegistered() { // Arrange var serviceCollection = new ServiceCollection(); serviceCollection.AddTransient(_ => new HttpClient() { Timeout = TimeSpan.FromSeconds(42) }); // Act serviceCollection.AddHttpClient(); var services = serviceCollection.BuildServiceProvider(); var clients = services.GetServices <HttpClient>(); // Assert Assert.NotNull(clients); var client = Assert.Single(clients); Assert.NotNull(client); Assert.Equal(TimeSpan.FromSeconds(42), client.Timeout); }
public async Task AddPolicyHandlerFromRegistry_PolicySelectorWithKey_AddsPolicyHandler() { var serviceCollection = new ServiceCollection(); var registry = serviceCollection.AddPolicyRegistry(); HttpMessageHandlerBuilder builder = null; // Act1 serviceCollection.AddHttpClient("Service") .AddPolicyHandler( (sp, req, key) => { return(RetryPolicy); }, (r) => { return(r.RequestUri.Host); } ) .ConfigureHttpMessageHandlerBuilder(b => { b.PrimaryHandler = PrimaryHandler; builder = b; }); var services = serviceCollection.BuildServiceProvider(); var factory = services.GetRequiredService <IHttpClientFactory>(); // Act2 var client = factory.CreateClient("Service"); // Assert Assert.NotNull(client); Assert.Collection( builder.AdditionalHandlers, h => Assert.IsType <LoggingScopeHttpMessageHandler>(h), h => Assert.IsType <PolicyHttpMessageHandler>(h), h => Assert.IsType <LoggingHttpMessageHandler>(h)); // Act 3 var request = new HttpRequestMessage(HttpMethod.Get, "http://host1/Service1/"); var response = await client.SendAsync(request); // Assert Assert.Equal(HttpStatusCode.Created, response.StatusCode); Assert.True(registry.ContainsKey("host1")); Assert.Equal(1, registry.Count); // Act 4 request = new HttpRequestMessage(HttpMethod.Get, "http://host1/Service1/"); response = await client.SendAsync(request); // Assert Assert.Equal(HttpStatusCode.Created, response.StatusCode); Assert.True(registry.ContainsKey("host1")); Assert.Equal(1, registry.Count); // Act 4 request = new HttpRequestMessage(HttpMethod.Get, "http://host2/Service1/"); response = await client.SendAsync(request); // Assert policy count Assert.Equal(HttpStatusCode.Created, response.StatusCode); Assert.Equal(2, registry.Count); Assert.True(registry.ContainsKey("host1")); Assert.True(registry.ContainsKey("host2")); }