Exemplo n.º 1
0
        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");
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 4
0
        [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"));
        }