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));
        }
Ejemplo n.º 3
0
        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);
                }
            }
        }