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