示例#1
0
        public static ICliFunctionalityProvider AddCustomHandler(
            this ICliFunctionalityProvider functionalityProvider,
            Action handler,
            string tokenText)
        {
            if (handler == null)
            {
                throw new ArgumentNullException(nameof(handler));
            }

            if (tokenText == null)
            {
                throw new ArgumentNullException(nameof(tokenText));
            }

            var family      = CheckArgumentsAndGetOrCreateFamily(functionalityProvider);
            var verbClass   = GetVerbTextClass(tokenText);
            var commandNode = new ExactTextNode(
                tokenText,
                verbClass,
                true,
                (node, token, resultAccumulator) =>
            {
                handler();
                throw new CliCustomHandlerException();
            },
                family,
                $"Custom handler node for verb '{tokenText}'");

            functionalityProvider.Node.EstablishLink(commandNode);
            return(functionalityProvider);
        }
示例#2
0
        public static ICliFunctionalityProvider AddHelp(this ICliFunctionalityProvider functionalityProvider)
        {
            if (functionalityProvider == null)
            {
                throw new ArgumentNullException(nameof(functionalityProvider));
            }

            if (!functionalityProvider.SupportsHelp)
            {
                throw new ArgumentException(
                          $"Functionality provider '{functionalityProvider.Name}' doesn't support help.",
                          nameof(functionalityProvider));
            }

            return(functionalityProvider.AddCustomHandler(
                       () => functionalityProvider.Output.WriteLine(functionalityProvider.GetHelp()),
                       "--help"));
        }
示例#3
0
        public static ICliFunctionalityProvider AddVersion(this ICliFunctionalityProvider functionalityProvider)
        {
            if (functionalityProvider == null)
            {
                throw new ArgumentNullException(nameof(functionalityProvider));
            }

            if (functionalityProvider.Version == null)
            {
                throw new ArgumentException(
                          $"Functionality provider '{functionalityProvider.Name}' doesn't support version.",
                          nameof(functionalityProvider));
            }

            return(functionalityProvider.AddCustomHandler(
                       () => functionalityProvider.Output.WriteLine(functionalityProvider.Version),
                       "--version"));
        }
示例#4
0
        private static INodeFamily CheckArgumentsAndGetOrCreateFamily(
            this ICliFunctionalityProvider functionality)
        {
            if (functionality == null)
            {
                throw new ArgumentNullException(nameof(functionality));
            }

            if (functionality.Name == null)
            {
                throw new CliException("Cannot add custom handler to a nameless functionality.");
            }

            var familyName = $"Family for custom handler nodes for functionality '{functionality.Name}' of type '{functionality.GetType().FullName}'.";

            var links = functionality.Node.ResolveLinks()
                        .Where(x => x.Family?.Name == familyName)
                        .ToList();

            var nodeFamily = links.Any() ? links.First().Family : new NodeFamily(familyName);

            return(nodeFamily);
        }