Example #1
0
        private async Task <bool> ProcessDefinedDirectives(ICliContext context)
        {
            bool isInteractiveMode = context.IsInteractiveMode;
            IReadOnlyList <DirectiveInput> directives = context.Input.Directives;

            foreach (DirectiveInput directiveInput in directives)
            {
                // Try to get the directive matching the input or fallback to default
                DirectiveSchema directive = context.RootSchema.TryFindDirective(directiveInput.Name) ?? throw EndUserTypinExceptions.UnknownDirectiveName(directiveInput);

                if (!isInteractiveMode && directive.InteractiveModeOnly)
                {
                    throw EndUserTypinExceptions.InteractiveModeDirectiveNotAvailable(directiveInput.Name);
                }

                // Get directive instance
                IDirective instance = (IDirective)_serviceProvider.GetRequiredService(directive.Type);

                await instance.HandleAsync(context.Console);

                if (!instance.ContinueExecution)
                {
                    return(false);
                }
            }

            return(true);
        }