public int RegisterService(object obj) { bool is_handler = false; foreach (var iftype in obj.GetType().GetInterfaces()) { string ifname = iftype.FullName; int iface_pos = ifname.IndexOf("+Iface"); if (iface_pos > 0) { Type ptype = Type.GetType(ifname.Substring(0, iface_pos) + "+Processor"); if (ptype != null) { TProcessor processor = Activator.CreateInstance(ptype, new object[] { obj }) as TProcessor; if (processor != null) { service_processor_map_.Add(processor.ServiceName(), processor); is_handler = true; } } } } if (!is_handler) { throw new ArgumentException("RegisterService accept rpc handler only"); } return(0); }