public virtual void AddGrpcDescript(string dll, Type[] types) { var fileTypes = types.Where(type => type.Name.EndsWith("Reflection")); foreach (var type in fileTypes) { BindingFlags flag = BindingFlags.Static | BindingFlags.Public; var property = type.GetProperties(flag).Where(t => t.Name == "Descriptor").FirstOrDefault(); if (property is null) { continue; } var fileDescriptor = property.GetValue(null) as FileDescriptor; if (fileDescriptor is null) { continue; } foreach (var svr in fileDescriptor.Services) { var srvName = svr.FullName.ToUpper(); var methodDic = new ConcurrentDictionary <string, MethodDescriptor>(); foreach (var method in svr.Methods) { methodDic.TryAdd(method.Name.ToUpper(), method); } Descriptor.AddOrUpdate(srvName, methodDic); SrvGroup.AddOrUpdate(srvName, dll); //if (Descriptor.ContainsKey(srvName)) // continue; //if (Descriptor.TryAdd(srvName, new ConcurrentDictionary<string, MethodDescriptor>())) // foreach (var method in svr.Methods) // { // Descriptor[srvName].TryAdd(method.Name.ToUpper(), method); // } } } }