static IEnumerable <ICommand> GetCommands(ICommand parent, IObjectProvider containingObject, MemberInfo m, IEnumerable <IOption> inheritedOptions) { if (m.GetCustomAttribute <ModuleAttribute>() != null) { return(GetCommands(parent, ObjectProvider.ResolveNow(containingObject, m), inheritedOptions)); } return(ObjectCommand.Create(parent, m, containingObject).ToEnumerable()); }
public static IEnumerable <IOption> GetOptions(IObjectProvider container, MemberInfo member) { if (container == null) { throw new ArgumentNullException(nameof(container)); } if (member == null) { throw new ArgumentNullException(nameof(member)); } if (!(member is FieldInfo || member is PropertyInfo)) { return(noOptions); } if (member.GetCustomAttribute <ModuleAttribute>() != null) { return(Option.GetOptions(ObjectProvider.ResolveNow(container, member))); } var usage = member.GetUsage(); if (!usage.HasValue) { return(noOptions); } var command = member.GetCustomAttribute <CommandAttribute>().ToMaybe(); if (command.HasValue) { return(noOptions); } if (member is FieldInfo) { return(new[] { (IOption) new FieldOption(container, (FieldInfo)member) }); } else if (member is PropertyInfo) { return(new[] { (IOption) new PropertyOption(container, (PropertyInfo)member) }); } throw new NotSupportedException(String.Format("{0} of type {1} is not supported.", member, member.GetType())); }