ScannerServiceCollectionExtensions.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using FastGithub.Scanner;
  2. using Microsoft.Extensions.Configuration;
  3. using Microsoft.Extensions.DependencyInjection;
  4. using System;
  5. using System.Net.Http;
  6. using System.Net.Http.Headers;
  7. namespace FastGithub
  8. {
  9. /// <summary>
  10. /// 服务注册扩展
  11. /// </summary>
  12. public static class ScannerServiceCollectionExtensions
  13. {
  14. /// <summary>
  15. /// 注册程序集下所有服务下选项
  16. /// </summary>
  17. /// <param name="services"></param>
  18. /// <param name="configuration">配置</param>
  19. /// <returns></returns>
  20. public static IServiceCollection AddGithubScanner(this IServiceCollection services, IConfiguration configuration)
  21. {
  22. var assembly = typeof(ScannerServiceCollectionExtensions).Assembly;
  23. var defaultUserAgent = new ProductInfoHeaderValue(assembly.GetName().Name ?? nameof(FastGithub), assembly.GetName().Version?.ToString());
  24. services
  25. .AddHttpClient(nameof(FastGithub))
  26. .SetHandlerLifetime(TimeSpan.FromMinutes(5d))
  27. .ConfigureHttpClient(httpClient =>
  28. {
  29. httpClient.DefaultRequestHeaders.Accept.TryParseAdd("*/*");
  30. httpClient.DefaultRequestHeaders.UserAgent.Add(defaultUserAgent);
  31. })
  32. .ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler
  33. {
  34. Proxy = null,
  35. UseProxy = false,
  36. AllowAutoRedirect = false
  37. })
  38. .AddHttpMessageHandler<GithubDnsHttpHandler>();
  39. return services
  40. .AddMemoryCache()
  41. .AddServiceAndOptions(assembly, configuration)
  42. .AddHostedService<GithubFullScanHostedService>()
  43. .AddHostedService<GithubResultScanHostedService>()
  44. .AddSingleton<IGithubScanResults>(appService => appService.GetRequiredService<GithubContextCollection>());
  45. ;
  46. }
  47. }
  48. }