private static void SetupManagedOperations(ManagementInfo info, Object instance) { MethodInfo[] methods = instance.GetType().GetMethods(BindingFlags.Public | BindingFlags.Instance); foreach (MethodInfo minfo in methods) { if (minfo.IsDefined(typeof(ManagedOperationAttribute), true)) { object[] atts = minfo.GetCustomAttributes(typeof(ManagedOperationAttribute), true); ManagedOperationAttribute att = (ManagedOperationAttribute)atts[0]; ParameterInfo[] parameters = minfo.GetParameters(); Type[] arguments = new Type[parameters.Length]; for (int i = 0; i < parameters.Length; i++) { arguments[i] = parameters[i].ParameterType; } ManagementOperation operation = new ManagementOperation(minfo.Name, att.Description, arguments); info.Operations.Add(operation); } } }
/// <summary> /// TODO: Summary /// </summary> /// <param name="action"></param> /// <param name="args"></param> /// <param name="signature"></param> /// <returns></returns> public Object Invoke(String action, Object[] args, Type[] signature) { if (action == null) { throw new ArgumentNullException("action"); } ManagementOperation operation = (ManagementOperation)info.Operations[action]; if (operation == null) { throw new InvalidOperationException(String.Format("Operation {0} doesn't exists.", action)); } MethodInfo method = resolver.GetMethod(MemberResolver.BuildOperationName(action, signature)); if (method == null) { foreach (MethodInfo met in resolver.Methods) { if (!met.Name.Equals(operation.Name)) { continue; } ParameterInfo[] parameters = met.GetParameters(); if (MemberResolver.Match(parameters, signature)) { method = met; break; } } } if (method == null) { throw new InvalidOperationException(String.Format("Operation {0} doesn't exists for the specified signature.", action)); } return(method.Invoke(instance, args)); }
private static void SetupManagedOperations(ManagementInfo info, Object instance) { MethodInfo[] methods = instance.GetType().GetMethods(BindingFlags.Public|BindingFlags.Instance); foreach(MethodInfo minfo in methods) { if (minfo.IsDefined( typeof(ManagedOperationAttribute), true )) { object[] atts = minfo.GetCustomAttributes( typeof(ManagedOperationAttribute), true ); ManagedOperationAttribute att = (ManagedOperationAttribute) atts[0]; ParameterInfo[] parameters = minfo.GetParameters(); Type[] arguments = new Type[ parameters.Length ]; for(int i=0 ; i < parameters.Length; i++ ) { arguments[i] = parameters[i].ParameterType; } ManagementOperation operation = new ManagementOperation(minfo.Name, att.Description, arguments); info.Operations.Add(operation); } } }