public static MethodDescriptorCollection CreateStaticMethodDescriptors(ICustomAttributeProvider provider) { var descriptors = new MethodDescriptorCollection(); var attrs = provider.GetCustomAttributes(typeof(CommandStaticMethodAttribute), true); foreach (var item in attrs) { if (item is CommandStaticMethodAttribute == false) continue; var attr = item as CommandStaticMethodAttribute; var staticDescriptors = CommandDescriptor.GetMethodDescriptors(attr.StaticType); descriptors.AddRange(Filter(staticDescriptors, attr.MethodNames)); } return descriptors; }
public static MethodDescriptorCollection CreateMethodDescriptors(Type type) { var descriptors = new MethodDescriptorCollection(); foreach (var item in type.GetMethods()) { var attr = item.GetCustomAttribute<CommandMethodAttribute>(); if (attr == null) continue; descriptors.Add(new MethodDescriptor(item)); } foreach (var item in GetStaticMethodDescriptors(type)) { descriptors.Add(item); } return descriptors; }
private static IEnumerable<MethodDescriptor> Filter(MethodDescriptorCollection descriptors, params string[] methodNames) { if (methodNames.Any() == false) { foreach (var item in descriptors) { yield return item; } } else { foreach (var item in methodNames) { yield return descriptors[item]; } } }