public void DiscoverRoutesOn([NotNull] RpcServerBase serverObject) { var type = serverObject.GetType(); const BindingFlags allKinds = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance; var methods = type.GetMethods(allKinds); foreach (var method in methods) { var handlerAttr = method.GetCustomAttribute <RpcMethodHandlerAttribute>(); if (handlerAttr == null) { continue; } var thiz = method.IsStatic ? null : serverObject; var del = (RouteHandler)Delegate.CreateDelegate(typeof(RouteHandler), thiz, method); AddRoute(handlerAttr.MethodName, del); } }