void Initialize(IEnumerable <ServiceDescriptor> services, FullNode fullNode, SecureApiSettings secureApiSettings, IWebHostBuilder webHostBuilder) { this.secureApiListening = $"{secureApiSettings.SecureApiHostBinding}:{secureApiSettings.SecureApiPort}"; webHostBuilder .UseKestrel(options => { }) .UseUrls(this.secureApiListening) .UseStartup <Startup>() .ConfigureServices(collection => { if (services == null) { return; } // copies all the services defined for the full node to the Api. // also copies over singleton instances already defined foreach (ServiceDescriptor service in services) { // open types can't be singletons if (service.ServiceType.IsGenericType || service.Lifetime == ServiceLifetime.Scoped) { collection.Add(service); continue; } try { object obj = fullNode.Services.ServiceProvider.GetService(service.ServiceType); if (obj != null && service.Lifetime == ServiceLifetime.Singleton && service.ImplementationInstance == null) { collection.AddSingleton(service.ServiceType, obj); } else { collection.Add(service); } } catch (Exception e) { Debug.WriteLine(e); } } }); this.webHost = webHostBuilder.Build(); this.webHost.Start(); }
public SecureApiHostFeature( IFullNodeBuilder fullNodeBuilder, FullNode fullNode, SecureApiSettings secureApiSettings, ILoggerFactory loggerFactory) { this.fullNodeBuilder = fullNodeBuilder; this.fullNode = fullNode; this.secureApiSettings = secureApiSettings; this.logger = loggerFactory.CreateLogger(GetType().FullName); this.InitializeBeforeBase = true; }