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