public static IServiceCollection AddKadderGrpcClient( this IServiceCollection services, Action <GrpcClientBuilder> builderAction) { var builder = new GrpcClientBuilder(); builderAction(builder); services.AddSingleton <GrpcClientBuilder>(); services.AddSingleton <GrpcServiceCallBuilder>(); services.RegSerializer(null, builder.BinarySerializer); var provider = services.BuildServiceProvider(); var serviceCallBuilder = provider.GetService <GrpcServiceCallBuilder>(); var binarySerializer = provider.GetService <IBinarySerializer>(); foreach (var options in builder.ClientOptions) { var grpcClient = new GrpcClient(options, serviceCallBuilder, binarySerializer); foreach (var item in grpcClient.GrpcServiceDic) { services.AddSingleton(item.Key, item.Value); } } return(services); }
public static IServiceCollection AddKadderGrpcClient( this IServiceCollection services, Action <GrpcClientBuilder> builderAction) { var builder = new GrpcClientBuilder(); builderAction(builder); var serviceCallBuilder = new GrpcServiceCallBuilder(); services.AddSingleton(builder); services.AddSingleton(serviceCallBuilder); services.RegSerializer(null, builder.BinarySerializer); foreach (var interceptor in builder.Interceptors) { services.AddSingleton(interceptor); } foreach (var clientMetadata in builder.ClientMetadatas) { var grpcClient = new GrpcClient(clientMetadata, builder, serviceCallBuilder); foreach (var interceptor in clientMetadata.PrivateInterceptors) { services.AddSingleton(interceptor); } foreach (var item in grpcClient.GrpcServiceDic) { services.AddSingleton(item.Key, item.Value); } } return(services); }
public GrpcClient(GrpcClientMetadata metadata, GrpcClientBuilder builder, GrpcServiceCallBuilder serviceCallBuilder) { _clientBuilder = builder; _metadata = metadata; _options = metadata.Options; ID = Guid.NewGuid(); _lastConnectedTime = DateTime.Now; GrpcServiceDic = new Dictionary <Type, Type>(); _oldMethodDic = new Dictionary <string, string>(); var namespaces = $"Kadder.Client.Services"; _codeBuilder = new CodeBuilder(namespaces, namespaces); var grpcServiceDic = serviceCallBuilder.GenerateHandler(_options, this, ref _codeBuilder); _codeAssembly = _codeBuilder.BuildAsync().Result; GrpcClientExtension.ClientDic.Add(ID.ToString(), this); foreach (var keyValuePair in grpcServiceDic) { var type = _codeAssembly.Assembly.GetType(keyValuePair.Value); GrpcServiceDic.Add(keyValuePair.Key, type); } }