private void GetReflection(int upStack, StackTrace stackTrace, out MethodInfo method, out CanBeReflected reflection) { method = (MethodInfo)stackTrace.GetFrame(upStack).GetMethod(); reflection = (CanBeReflected)Attribute.GetCustomAttribute(method, typeof(CanBeReflected)); if (reflection != null && reflection.NotReflectableLookUpAnotherTrace) { GetReflection(upStack + 1, stackTrace, out method, out reflection); } }
public ServerHandler(string url, IRegistryCore registry, ConnectorBase conn) : base("POST", url) { m_registry = registry; if (m_methods == null) { m_methods = new Dictionary <string, List <MethodImplementation> >(); List <string> alreadyRunPlugins = new List <string>(); List <ConnectorBase> connectors = conn == null ? ConnectorRegistry.Connectors : new List <ConnectorBase>() { conn }; foreach (ConnectorBase plugin in connectors) { if (alreadyRunPlugins.Contains(plugin.PluginName)) { continue; } alreadyRunPlugins.Add(plugin.PluginName); foreach (MethodInfo method in plugin.GetType().GetMethods()) { CanBeReflected reflection = (CanBeReflected)Attribute.GetCustomAttribute(method, typeof(CanBeReflected)); if (reflection != null) { string methodName = reflection.RenamedMethod == "" ? method.Name : reflection.RenamedMethod; List <MethodImplementation> methods = new List <MethodImplementation>(); MethodImplementation imp = new MethodImplementation() { Method = method, Reference = plugin, Attribute = reflection }; if (!m_methods.TryGetValue(methodName, out methods)) { m_methods.Add(methodName, (methods = new List <MethodImplementation>())); } methods.Add(imp); } } } } }