GrpcServerConfigurationExtensions.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. using Grpc.Core;
  2. using TEAMModelOS.SDK.Module.GrpcServer.Implements;
  3. using TEAMModelOS.SDK.Module.GrpcServer.Interfaces;
  4. using TEAMModelOS.SDK.Module.GrpcServer.Internal;
  5. using Microsoft.Extensions.DependencyInjection;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. namespace TEAMModelOS.SDK.Module.GrpcServer.Extensions
  10. {
  11. /// <summary>
  12. /// Grpc 配置相关的扩展方法
  13. /// </summary>
  14. public static class GrpcServerConfigurationExtensions
  15. {
  16. public static GrpcServerServiceBuilder Builder { get; set; }
  17. /// <summary>
  18. ///
  19. /// </summary>
  20. /// <param name="services"></param>
  21. /// <returns></returns>
  22. private static GrpcServerServiceBuilder AddServerBuilder(this IServiceCollection services)
  23. {
  24. return new GrpcServerServiceBuilder(services);
  25. }
  26. /// <summary>
  27. /// 注册 Grpc 服务
  28. /// </summary>
  29. /// <param name="configs"> 配置模块</param>
  30. /// <param name="optionAction">配置操作</param>
  31. public static GrpcServerServiceBuilder AddGrpcServer(this IServiceCollection services)
  32. {
  33. if (Builder == null)
  34. {
  35. Builder = services.AddServerBuilder();
  36. }
  37. //自动扫描基于 IGrpcService 的Grpc服务
  38. //services.Scan(scan => scan.FromAssemblyOf<IGrpcService>()
  39. // .AddClasses().AsImplementedInterfaces().WithSingletonLifetime());
  40. //引入当前
  41. services.Scan(scan => scan.FromApplicationDependencies()
  42. .AddClasses(classes => classes.AssignableTo<IGrpcService>())
  43. .AsImplementedInterfaces()
  44. .WithSingletonLifetime());
  45. //services.Scan(scan => scan.FromApplicationDependencies()
  46. // .AddClasses().AsImplementedInterfaces().WithSingletonLifetime());
  47. services.AddSingleton<IRpcConfig, RpcConfig>();
  48. return Builder;
  49. }
  50. /// <summary>
  51. /// Grpc配置信息
  52. /// </summary>
  53. /// <param name="builder"></param>
  54. /// <param name="options"></param>
  55. /// <returns></returns>
  56. public static GrpcServerServiceBuilder AddGrpcConfiguration(this GrpcServerServiceBuilder builder, GrpcServerConfig[] serverConfigs)
  57. {
  58. builder.Services.AddSingleton(serverConfigs);
  59. return builder;
  60. }
  61. /// <summary>
  62. /// Grpc 服务端IP 配置
  63. /// </summary>
  64. /// <param name="builder"></param>
  65. /// <param name="options"></param>
  66. /// <returns></returns>
  67. public static GrpcServerServiceBuilder AddGrpcIpConfig(this GrpcServerServiceBuilder builder,GrpcIPConfig config)
  68. {
  69. builder.Services.AddSingleton(config);
  70. return builder;
  71. }
  72. /// <summary>
  73. /// 注入基本配制
  74. /// </summary>
  75. /// <param name="action"></param>
  76. /// <returns></returns>
  77. public static GrpcServerServiceBuilder UseOptions(this GrpcServerServiceBuilder builder, Action<GrpcExtensionsOptions> action)
  78. {
  79. action(GrpcExtensionsOptions.Instance);
  80. return builder;
  81. }
  82. /// <summary>
  83. /// CodeFirst生成proto文件
  84. /// </summary>
  85. /// <param name="dir"></param>
  86. /// <returns></returns>
  87. public static GrpcServerServiceBuilder UseProtoGenerate(this GrpcServerServiceBuilder builder, string dir)
  88. {
  89. ProtoGenerator.Gen(dir);
  90. return builder;
  91. }
  92. /// <summary>
  93. /// 注入GrpcService
  94. /// </summary>
  95. /// <param name="grpcServices"></param>
  96. /// <returns></returns>
  97. public static GrpcServerServiceBuilder UseGrpcService(this GrpcServerServiceBuilder builder, IEnumerable<IGrpcService> grpcServices)
  98. {
  99. var builders = ServerServiceDefinition.CreateBuilder();
  100. grpcServices.ToList().ForEach(grpc => grpc.RegisterMethod(builders));
  101. // _serviceDefinitions.Add(builders.Build());
  102. return builder;
  103. }
  104. }
  105. }