2
0

GithubScanBuilder.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading.Tasks;
  4. namespace FastGithub.Scanner
  5. {
  6. /// <summary>
  7. /// 表示中间件创建者
  8. /// </summary>
  9. sealed class GithubScanBuilder : IGithubScanBuilder
  10. {
  11. private readonly GithubScanDelegate completedHandler;
  12. private readonly List<Func<GithubScanDelegate, GithubScanDelegate>> middlewares = new();
  13. /// <summary>
  14. /// 获取服务提供者
  15. /// </summary>
  16. public IServiceProvider AppServices { get; }
  17. /// <summary>
  18. /// 中间件创建者
  19. /// </summary>
  20. /// <param name="appServices"></param>
  21. public GithubScanBuilder(IServiceProvider appServices)
  22. : this(appServices, context => Task.CompletedTask)
  23. {
  24. }
  25. /// <summary>
  26. /// 中间件创建者
  27. /// </summary>
  28. /// <param name="appServices"></param>
  29. /// <param name="completedHandler">完成执行内容处理者</param>
  30. public GithubScanBuilder(IServiceProvider appServices, GithubScanDelegate completedHandler)
  31. {
  32. this.AppServices = appServices;
  33. this.completedHandler = completedHandler;
  34. }
  35. /// <summary>
  36. /// 使用中间件
  37. /// </summary>
  38. /// <param name="middleware"></param>
  39. /// <returns></returns>
  40. public IGithubScanBuilder Use(Func<GithubScanDelegate, GithubScanDelegate> middleware)
  41. {
  42. this.middlewares.Add(middleware);
  43. return this;
  44. }
  45. /// <summary>
  46. /// 创建所有中间件执行处理者
  47. /// </summary>
  48. /// <returns></returns>
  49. public GithubScanDelegate Build()
  50. {
  51. var handler = this.completedHandler;
  52. for (var i = this.middlewares.Count - 1; i >= 0; i--)
  53. {
  54. handler = this.middlewares[i](handler);
  55. }
  56. return handler;
  57. }
  58. }
  59. }