RpcBuilderExtensions.cs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using JsonRPC4.Common.Tools;
  2. using JsonRPC4.Router;
  3. using JsonRPC4.Router.Abstractions;
  4. using Microsoft.Extensions.DependencyInjection;
  5. using Microsoft.Extensions.Options;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Threading.Tasks;
  10. namespace JsonRPC4.Builder
  11. {
  12. public static class RpcBuilderExtensions
  13. {
  14. public static IRpcBuilder WithOptions(this IRpcBuilder builder, Action<RpcServerConfiguration> configureOptions)
  15. {
  16. RpcServerConfiguration obj = new RpcServerConfiguration();
  17. configureOptions?.Invoke(obj);
  18. builder.Services.Configure(configureOptions);
  19. return builder;
  20. }
  21. public static IRpcBuilder WithOptions(this IRpcBuilder builder, RpcServerConfiguration configuration)
  22. {
  23. builder.Services.AddSingleton(Options.Create(configuration));
  24. return builder;
  25. }
  26. public static IRpcBuilder WithParser<T>(this IRpcBuilder builder) where T : class, IRpcParser
  27. {
  28. builder.Services.AddScoped<IRpcParser, T>();
  29. return builder;
  30. }
  31. public static IRpcBuilder WithCompressor<T>(this IRpcBuilder builder) where T : class, IStreamCompressor
  32. {
  33. builder.Services.AddScoped<IStreamCompressor, T>();
  34. return builder;
  35. }
  36. public static IRpcBuilder WithReponseSerializer<T>(this IRpcBuilder builder) where T : class, IRpcResponseSerializer
  37. {
  38. builder.Services.AddScoped<IRpcResponseSerializer, T>();
  39. return builder;
  40. }
  41. public static IRpcBuilder WithRequestMatcher<T>(this IRpcBuilder builder) where T : class, IRpcRequestMatcher
  42. {
  43. builder.Services.AddScoped<IRpcRequestMatcher, T>();
  44. return builder;
  45. }
  46. }
  47. }