mirror of
				https://github.com/nsnail/spectre.console.git
				synced 2025-11-01 01:25:27 +08:00 
			
		
		
		
	(#606) added ExceptionHandler to ICommandAppSettings
So exceptions can be handled in Spectre.Console.Cli. Also, some documentation was added.
This commit is contained in:
		 Nils Andresen
					Nils Andresen
				
			
				
					committed by
					
						 Patrik Svensson
						Patrik Svensson
					
				
			
			
				
	
			
			
			 Patrik Svensson
						Patrik Svensson
					
				
			
						parent
						
							045d0922c8
						
					
				
				
					commit
					c5c1852fc3
				
			| @@ -103,6 +103,11 @@ namespace Spectre.Console.Cli | ||||
|                     throw; | ||||
|                 } | ||||
|  | ||||
|                 if (_configurator.Settings.ExceptionHandler != null) | ||||
|                 { | ||||
|                     return _configurator.Settings.ExceptionHandler(ex); | ||||
|                 } | ||||
|  | ||||
|                 // Render the exception. | ||||
|                 var pretty = GetRenderableErrorMessage(ex); | ||||
|                 if (pretty != null) | ||||
|   | ||||
| @@ -224,5 +224,39 @@ namespace Spectre.Console.Cli | ||||
|  | ||||
|             return configurator.AddDelegate<TSettings>(name, (c, _) => func(c)); | ||||
|         } | ||||
|  | ||||
|         /// <summary> | ||||
|         /// Sets the ExceptionsHandler. | ||||
|         /// <para>Setting <see cref="ICommandAppSettings.ExceptionHandler"/> this way will use the | ||||
|         /// default exit code of -1.</para> | ||||
|         /// </summary> | ||||
|         /// <param name="configurator">The configurator.</param> | ||||
|         /// <param name="exceptionHandler">The Action that handles the exception.</param> | ||||
|         /// <returns>A configurator that can be used to configure the application further.</returns> | ||||
|         public static IConfigurator SetExceptionHandler(this IConfigurator configurator, Action<Exception> exceptionHandler) | ||||
|         { | ||||
|             return configurator.SetExceptionHandler(ex => | ||||
|             { | ||||
|                 exceptionHandler(ex); | ||||
|                 return -1; | ||||
|             }); | ||||
|         } | ||||
|  | ||||
|         /// <summary> | ||||
|         /// Sets the ExceptionsHandler. | ||||
|         /// </summary> | ||||
|         /// <param name="configurator">The configurator.</param> | ||||
|         /// <param name="exceptionHandler">The Action that handles the exception.</param> | ||||
|         /// <returns>A configurator that can be used to configure the application further.</returns> | ||||
|         public static IConfigurator SetExceptionHandler(this IConfigurator configurator, Func<Exception, int>? exceptionHandler) | ||||
|         { | ||||
|             if (configurator == null) | ||||
|             { | ||||
|                 throw new ArgumentNullException(nameof(configurator)); | ||||
|             } | ||||
|  | ||||
|             configurator.Settings.ExceptionHandler = exceptionHandler; | ||||
|             return configurator; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -1,3 +1,5 @@ | ||||
| using System; | ||||
|  | ||||
| namespace Spectre.Console.Cli | ||||
| { | ||||
|     /// <summary> | ||||
| @@ -43,6 +45,8 @@ namespace Spectre.Console.Cli | ||||
|  | ||||
|         /// <summary> | ||||
|         /// Gets or sets a value indicating whether or not exceptions should be propagated. | ||||
|         /// <para>Setting this to <c>true</c> will disable default Exception handling and | ||||
|         /// any <see cref="ExceptionHandler"/>, if set.</para> | ||||
|         /// </summary> | ||||
|         bool PropagateExceptions { get; set; } | ||||
|  | ||||
| @@ -50,5 +54,11 @@ namespace Spectre.Console.Cli | ||||
|         /// Gets or sets a value indicating whether or not examples should be validated. | ||||
|         /// </summary> | ||||
|         bool ValidateExamples { get; set; } | ||||
|  | ||||
|         /// <summary> | ||||
|         /// Gets or sets a handler for Exceptions. | ||||
|         /// <para>This handler will not be called, if <see cref="PropagateExceptions"/> is set to <c>true</c>.</para> | ||||
|         /// </summary> | ||||
|         public Func<Exception, int>? ExceptionHandler { get; set; } | ||||
|     } | ||||
| } | ||||
| @@ -17,6 +17,8 @@ namespace Spectre.Console.Cli | ||||
|         public ParsingMode ParsingMode => | ||||
|             StrictParsing ? ParsingMode.Strict : ParsingMode.Relaxed; | ||||
|  | ||||
|         public Func<Exception, int>? ExceptionHandler { get; set; } | ||||
|  | ||||
|         public CommandAppSettings(ITypeRegistrar registrar) | ||||
|         { | ||||
|             Registrar = new TypeRegistrar(registrar); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user