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); }
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)); }
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))); }
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))); }
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)); }