internal IServiceCollection RegisterAllDependencies(IServiceCollection services)
        {
            if (string.IsNullOrWhiteSpace(_settings.ExePath))
            {
                throw new ArgumentNullException(nameof(_settings.ExePath));
            }
            if (!File.Exists(_settings.ExePath))
            {
                throw new FileNotFoundException($"Couldn't find hook executable at {_settings.ExePath}");
            }
            services.TryAddSingleton <IHookLifetimeService>(sp => new HookLifetimeService(_settings.ExePath));

            if (_settings.UseHookServiceFactory)
            {
                services.AddHttpClient <ISocketHookServiceFactory, SocketHookServiceFactory>(ConfigureHttpClient)
                .SetHandlerLifetime(Timeout.InfiniteTimeSpan);
            }

            if (_settings.HasValidInjectOptions())
            {
                services.AddHttpClient <ISocketHookService, SocketHookService>(ConfigureHttpClient)
                .SetHandlerLifetime(Timeout.InfiniteTimeSpan);
            }

            var isStartupStringValid = !string.IsNullOrWhiteSpace(_settings.InjectToExeOnStartup) && _settings.InjectToExeOnStartup.EndsWith(".exe");
            var isStartupExeValid    = isStartupStringValid && File.Exists(_settings.InjectToExeOnStartup);

            if (!isStartupExeValid)
            {
                _settings.InjectToExeOnStartup = string.Empty;
            }

            services.AddHostedService(sp =>
            {
                ISocketHookService hookService;
                if (isStartupExeValid && _settings.HasValidInjectOptions())
                {
                    hookService = sp.GetRequiredService <ISocketHookService>();
                }
                else
                {
                    hookService = sp.GetRequiredService <ISocketHookServiceFactory>()
                                  .CreateKillAllOnlyService();
                }

                return(new SocketHookHosting(_settings,
                                             sp.GetRequiredService <IHookLifetimeService>(), hookService,
                                             sp.GetRequiredService <IHostEnvironment>()));
            });

            return(services);
        }