Exemplo n.º 1
0
        public static IServiceCollection AddWcfService <TService>(this IServiceCollection services, WcfServiceConfigurator <TService> configurator, ServiceLifetime serviceLifetime = ServiceLifetime.Singleton) where TService : class
        {
            if (services.Any(sd => sd.ImplementationType == typeof(TService)))
            {
                throw new ArgumentException($"The service {typeof(TService).Name} is already registered");
            }

            services.AddSingleton <IServiceHostConfiguration <TService> >(sp =>
            {
                var loggerFactory = sp.GetRequiredService <ILoggerFactory>();

                var configuration = new WcfServiceHostConfiguration <TService>(loggerFactory);

                configurator?.Invoke(configuration);

                return(configuration);
            });

            services.TryAddSingleton <IServiceHostBuilder, ServiceHostBuilder>();

            services.AddSingleton <WcfServiceHostedServiceConfiguration <TService> >();

            services.AddSingleton <IHostedService, WcfServiceHostedService <TService> >(sp =>
            {
                var options = sp.GetRequiredService <WcfServiceHostedServiceConfiguration <TService> >();

                var logger = sp.GetRequiredService <ILogger <WcfServiceHostedService> >();

                var announceService = sp.GetRequiredService <IAnnouncementService>();

                return(new WcfServiceHostedService <TService>(options, announceService, logger));
            });

            services.TryAddSingleton <IAnnouncementService, EmptyAnnouncementService>();

            services.Add(ServiceDescriptor.Describe(typeof(TService), typeof(TService), serviceLifetime));

            return(services);
        }
Exemplo n.º 2
0
        public void AddWcfService_throws_if_same_service_registered_twice(ServiceCollection services, WcfServiceConfigurator <TestService> configurator, ServiceLifetime lifetime)
        {
            ServiceCollectionExtensions.AddWcfService <TestService>(services, configurator, lifetime);

            Assert.Throws <ArgumentException>(() => ServiceCollectionExtensions.AddWcfService <TestService>(services, configurator, lifetime));
        }
Exemplo n.º 3
0
        public void AddWcfService_registers_hosted_service_configuration(IServiceCollection services, WcfServiceConfigurator <TestService> configurator, ServiceLifetime lifetime)
        {
            ServiceCollectionExtensions.AddWcfService <TestService>(services, configurator, lifetime);

            Mock.Get(services).Verify(p => p.Add(It.Is <ServiceDescriptor>(d => d.ServiceType == typeof(WcfServiceHostedServiceConfiguration <TestService>) && d.Lifetime == ServiceLifetime.Singleton)));
        }
Exemplo n.º 4
0
        public void AddWcfService_registers_service(IServiceCollection services, WcfServiceConfigurator <TestService> configurator, ServiceLifetime lifetime)
        {
            ServiceCollectionExtensions.AddWcfService <TestService>(services, configurator, lifetime);

            Mock.Get(services).Verify(p => p.Add(It.Is <ServiceDescriptor>(d => d.ServiceType == typeof(TestService) && d.ImplementationType == typeof(TestService) && d.Lifetime == lifetime)));
        }
Exemplo n.º 5
0
        public void AddWcfService_returns_same_ServiceCollection(IServiceCollection services, WcfServiceConfigurator <TestService> configurator, ServiceLifetime lifetime)
        {
            var result = ServiceCollectionExtensions.AddWcfService <TestService>(services, configurator, lifetime);

            Assert.That(result, Is.SameAs(services));
        }