Esempio n. 1
0
        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);
                    //    }
                }
            }
        }