-
-
Notifications
You must be signed in to change notification settings - Fork 520
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add the possibility to register multiple interceptors #1412
Add the possibility to register multiple interceptors #1412
Conversation
@spectreconsole/maintainers what do you think? |
Having the interceptors registered with the ITypeRegistrar also enables the usage of ITypeResolver in interceptors.
15339f5
to
5c70181
Compare
@nils-a I took a look at the code changes. I even pulled down your branch on my machine, did a My overall first impression is positive! The additions to There's one small gap, however. When an exception occurs in a command class, I need to be able to handle that with access to DI. Unfortunately, the Here's the problem I'm dealing with. I use Serilog in my application. I register a factory in DI that I use to create an When an exception occurs, I'd like to be able to use an instance of One way I can think of to allow for this is to have something like If we can reuse If you need additional details or review, please don't hesitate to ask! |
One small detail I might add: If you decide to go with a registered type to handle exception processing, we still need the existing exception handler functionality as a fallback. There's a possibility that, due to DI dependencies and order of execution, that you would fail to resolve instances of In those cases, the behavior I'd expect is that you silently ignore those failures and treat them as if they are not registered to begin with. You'd proceed to call the configured exception handler (or propagate it, depending on how the user configured things). This allows me to do So basically I think this means:
You might even make #1 a user choice similar to how ASP.NET middleware works (user can say they "handled" the exception or not, which would control whether or not the fallback is used). All this can probably get pretty complicated so again, I am happy to let you work out the details. I just wanted to brain dump some logistical concerns. Thanks again for everything. |
Excellent!! With both of these changes, I am able to get rid of all of my hacks. I cherry picked your other PR into this one, did another local build, and tested out the changes on my end. This is the internal static class Program
{
private static ILifetimeScope? _scope;
private static IBaseCommandSetupTask[] _tasks = Array.Empty<IBaseCommandSetupTask>();
private static ILogger? _log;
[SuppressMessage("Design", "CA1031:Do not catch general exception types")]
public static int Main(string[] args)
{
var builder = new ContainerBuilder();
CompositionRoot.Setup(builder);
var logLevelSwitch = new LoggingLevelSwitch();
var appDataPathProvider = new AppDataPathProvider();
CompositionRoot.RegisterExternal(builder, logLevelSwitch, appDataPathProvider);
var app = new CommandApp(new AutofacTypeRegistrar(builder, s => _scope = s));
app.Configure(config =>
{
#if DEBUG
config.PropagateExceptions();
config.ValidateExamples();
#endif
config.Settings.PropagateExceptions = true;
config.Settings.StrictParsing = true;
config.SetApplicationName("recyclarr");
config.SetApplicationVersion(
$"v{GitVersionInformation.SemVer} ({GitVersionInformation.FullBuildMetaData})");
var interceptor = new CliInterceptor(logLevelSwitch, appDataPathProvider);
interceptor.OnIntercepted.Subscribe(_ => OnAppInitialized());
config.SetInterceptor(interceptor);
CliSetup.Commands(config);
});
var result = 1;
try
{
result = app.Run(args);
}
catch (Exception ex)
{
if (_log is null)
{
AnsiConsole.WriteException(ex, ExceptionFormats.ShortenEverything);
}
else
{
_log.Error(ex, "Non-recoverable Exception");
}
}
finally
{
OnAppCleanup();
}
return result;
}
private static void OnAppInitialized()
{
if (_scope is null)
{
throw new InvalidProgramException("Composition root is not initialized");
}
_log = _scope.Resolve<ILogger>();
_log.Debug("Recyclarr Version: {Version}", GitVersionInformation.InformationalVersion);
_tasks = _scope.Resolve<IOrderedEnumerable<IBaseCommandSetupTask>>().ToArray();
_tasks.ForEach(x => x.OnStart());
}
private static void OnAppCleanup()
{
_tasks.Reverse().ForEach(x => x.OnFinish());
}
} And this is where we are after all the cleanup: internal static class Program
{
[SuppressMessage("Design", "CA1031:Do not catch general exception types")]
public static int Main(string[] args)
{
var builder = new ContainerBuilder();
CompositionRoot.Setup(builder);
var app = new CommandApp(new AutofacTypeRegistrar(builder));
app.Configure(config =>
{
#if DEBUG
config.PropagateExceptions();
config.ValidateExamples();
#endif
// config.Settings.PropagateExceptions = true;
config.Settings.StrictParsing = true;
config.SetApplicationName("recyclarr");
config.SetApplicationVersion(
$"v{GitVersionInformation.SemVer} ({GitVersionInformation.FullBuildMetaData})");
config.SetExceptionHandler((ex, resolver) =>
{
var log = (ILogger?) resolver?.Resolve(typeof(ILogger));
if (log is null)
{
AnsiConsole.WriteException(ex, ExceptionFormats.ShortenEverything);
}
else
{
log.Error(ex, "Non-recoverable Exception");
}
});
CliSetup.Commands(config);
});
return app.Run(args);
}
} I was able to clean up quite a bit. Also notice I no longer needed the hack in my custom type registrar to access the The other stuff cleaned up nicely as separate interceptor classes: public class VersionLogInterceptor(ILogger log) : ICommandInterceptor
{
public void Intercept(CommandContext context, CommandSettings settings)
{
log.Debug("Recyclarr Version: {Version}", GitVersionInformation.InformationalVersion);
}
}
public class GlobalTaskInterceptor(IOrderedEnumerable<IGlobalSetupTask> tasks) : ICommandInterceptor
{
public void Intercept(CommandContext context, CommandSettings settings)
{
tasks.ForEach(x => x.OnStart());
}
public void InterceptResult(CommandContext context, CommandSettings settings, ref int result)
{
tasks.Reverse().ForEach(x => x.OnFinish());
}
} Overall I am pleased with these improvements. Thank you very much for listening to my feedback! |
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [Spectre.Console.Testing](https://togithub.com/spectreconsole/spectre.console) | `0.48.0` -> `0.49.0` | [![age](https://developer.mend.io/api/mc/badges/age/nuget/Spectre.Console.Testing/0.49.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/nuget/Spectre.Console.Testing/0.49.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/nuget/Spectre.Console.Testing/0.48.0/0.49.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/nuget/Spectre.Console.Testing/0.48.0/0.49.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>spectreconsole/spectre.console (Spectre.Console.Testing)</summary> ### [`v0.49.0`](https://togithub.com/spectreconsole/spectre.console/releases/tag/0.49.0) [Compare Source](https://togithub.com/spectreconsole/spectre.console/compare/0.48.0...0.49.0) ##### What's Changed - Cleanup Line-Endings by [@​nils-a](https://togithub.com/nils-a) in [https://github.com/spectreconsole/spectre.console/pull/1381](https://togithub.com/spectreconsole/spectre.console/pull/1381) - Added spectre.console.cli to quick-start. by [@​nils-a](https://togithub.com/nils-a) in [https://github.com/spectreconsole/spectre.console/pull/1413](https://togithub.com/spectreconsole/spectre.console/pull/1413) - Fix rendering of ListPrompt for odd pageSizes by [@​nils-a](https://togithub.com/nils-a) in [https://github.com/spectreconsole/spectre.console/pull/1365](https://togithub.com/spectreconsole/spectre.console/pull/1365) - Remove mandelbrot example due to conflicting license by [@​patriksvensson](https://togithub.com/patriksvensson) in [https://github.com/spectreconsole/spectre.console/pull/1426](https://togithub.com/spectreconsole/spectre.console/pull/1426) - Allow specifying a property to ignore the use of build-time packages for versioning and analysis by [@​baronfel](https://togithub.com/baronfel) in [https://github.com/spectreconsole/spectre.console/pull/1425](https://togithub.com/spectreconsole/spectre.console/pull/1425) - Add the possibility to register multiple interceptors by [@​nils-a](https://togithub.com/nils-a) in [https://github.com/spectreconsole/spectre.console/pull/1412](https://togithub.com/spectreconsole/spectre.console/pull/1412) - Added the ITypeResolver to the ExceptionHandler by [@​nils-a](https://togithub.com/nils-a) in [https://github.com/spectreconsole/spectre.console/pull/1411](https://togithub.com/spectreconsole/spectre.console/pull/1411) - Updated typo in commandApp.md by [@​DarqueWarrior](https://togithub.com/DarqueWarrior) in [https://github.com/spectreconsole/spectre.console/pull/1431](https://togithub.com/spectreconsole/spectre.console/pull/1431) - Command with -v displays app version instead of executing the command by [@​FrankRay78](https://togithub.com/FrankRay78) in [https://github.com/spectreconsole/spectre.console/pull/1427](https://togithub.com/spectreconsole/spectre.console/pull/1427) - HelpProvider colors should be configurable by [@​FrankRay78](https://togithub.com/FrankRay78) in [https://github.com/spectreconsole/spectre.console/pull/1408](https://togithub.com/spectreconsole/spectre.console/pull/1408) - Direct contributors to the current CONTRIBUTING.md by [@​tonycknight](https://togithub.com/tonycknight) in [https://github.com/spectreconsole/spectre.console/pull/1435](https://togithub.com/spectreconsole/spectre.console/pull/1435) - Fix deadlock when cancelling prompts by [@​caesay](https://togithub.com/caesay) in [https://github.com/spectreconsole/spectre.console/pull/1439](https://togithub.com/spectreconsole/spectre.console/pull/1439) - Add progress bar value formatter by [@​jsheely](https://togithub.com/jsheely) in [https://github.com/spectreconsole/spectre.console/pull/1414](https://togithub.com/spectreconsole/spectre.console/pull/1414) - Update dependencies and do some clean-up by [@​patriksvensson](https://togithub.com/patriksvensson) in [https://github.com/spectreconsole/spectre.console/pull/1440](https://togithub.com/spectreconsole/spectre.console/pull/1440) - Delete \[UsesVerify], which has become obsolete through the latest update. by [@​danielcweber](https://togithub.com/danielcweber) in [https://github.com/spectreconsole/spectre.console/pull/1456](https://togithub.com/spectreconsole/spectre.console/pull/1456) - Don't erase secret prompt text upon backspace when mask is null by [@​danielcweber](https://togithub.com/danielcweber) in [https://github.com/spectreconsole/spectre.console/pull/1458](https://togithub.com/spectreconsole/spectre.console/pull/1458) - Update dependencies to the latest version by [@​patriksvensson](https://togithub.com/patriksvensson) in [https://github.com/spectreconsole/spectre.console/pull/1459](https://togithub.com/spectreconsole/spectre.console/pull/1459) - Automatically register command settings by [@​patriksvensson](https://togithub.com/patriksvensson) in [https://github.com/spectreconsole/spectre.console/pull/1463](https://togithub.com/spectreconsole/spectre.console/pull/1463) - chore: Update dependency dotnet-example to v3.1.0 by [@​renovate](https://togithub.com/renovate) in [https://github.com/spectreconsole/spectre.console/pull/1470](https://togithub.com/spectreconsole/spectre.console/pull/1470) - chore: Update dependency Roslynator.Analyzers to v4.11.0 by [@​renovate](https://togithub.com/renovate) in [https://github.com/spectreconsole/spectre.console/pull/1473](https://togithub.com/spectreconsole/spectre.console/pull/1473) - Remove \[DebuggerDisplay] from Paragraph by [@​martincostello](https://togithub.com/martincostello) in [https://github.com/spectreconsole/spectre.console/pull/1477](https://togithub.com/spectreconsole/spectre.console/pull/1477) - Selection Prompt Search by [@​slang25](https://togithub.com/slang25) in [https://github.com/spectreconsole/spectre.console/pull/1289](https://togithub.com/spectreconsole/spectre.console/pull/1289) - Update dependency SixLabors.ImageSharp to v3.1.3 by [@​renovate](https://togithub.com/renovate) in [https://github.com/spectreconsole/spectre.console/pull/1486](https://togithub.com/spectreconsole/spectre.console/pull/1486) - Positioned Progress Tasks - Before or After Other Tasks by [@​thomhurst](https://togithub.com/thomhurst) in [https://github.com/spectreconsole/spectre.console/pull/1250](https://togithub.com/spectreconsole/spectre.console/pull/1250) - Added NoStackTrace to ExceptionFormats by [@​gerardog](https://togithub.com/gerardog) in [https://github.com/spectreconsole/spectre.console/pull/1489](https://togithub.com/spectreconsole/spectre.console/pull/1489) - Pipe character for listing options (issue 1434) by [@​FrankRay78](https://togithub.com/FrankRay78) in [https://github.com/spectreconsole/spectre.console/pull/1498](https://togithub.com/spectreconsole/spectre.console/pull/1498) - Improve XmlDoc output by [@​yenneferofvengerberg](https://togithub.com/yenneferofvengerberg) in [https://github.com/spectreconsole/spectre.console/pull/1503](https://togithub.com/spectreconsole/spectre.console/pull/1503) - Revert [`71a5d83`](https://togithub.com/spectreconsole/spectre.console/commit/71a5d830) to undo flickering regression by [@​phil-scott-78](https://togithub.com/phil-scott-78) in [https://github.com/spectreconsole/spectre.console/pull/1504](https://togithub.com/spectreconsole/spectre.console/pull/1504) - AddDelegate uses an abstract type when used in a branch by [@​BlazeFace](https://togithub.com/BlazeFace) in [https://github.com/spectreconsole/spectre.console/pull/1509](https://togithub.com/spectreconsole/spectre.console/pull/1509) - Missing Separator When Headers are Hidden by [@​BlazeFace](https://togithub.com/BlazeFace) in [https://github.com/spectreconsole/spectre.console/pull/1513](https://togithub.com/spectreconsole/spectre.console/pull/1513) - Expose raw arguments on the command context by [@​patriksvensson](https://togithub.com/patriksvensson) in [https://github.com/spectreconsole/spectre.console/pull/1523](https://togithub.com/spectreconsole/spectre.console/pull/1523) - Add token representation to remaining arguments by [@​patriksvensson](https://togithub.com/patriksvensson) in [https://github.com/spectreconsole/spectre.console/pull/1525](https://togithub.com/spectreconsole/spectre.console/pull/1525) ##### New Contributors - [@​baronfel](https://togithub.com/baronfel) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1425](https://togithub.com/spectreconsole/spectre.console/pull/1425) - [@​DarqueWarrior](https://togithub.com/DarqueWarrior) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1431](https://togithub.com/spectreconsole/spectre.console/pull/1431) - [@​tonycknight](https://togithub.com/tonycknight) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1435](https://togithub.com/spectreconsole/spectre.console/pull/1435) - [@​caesay](https://togithub.com/caesay) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1439](https://togithub.com/spectreconsole/spectre.console/pull/1439) - [@​jsheely](https://togithub.com/jsheely) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1414](https://togithub.com/spectreconsole/spectre.console/pull/1414) - [@​danielcweber](https://togithub.com/danielcweber) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1456](https://togithub.com/spectreconsole/spectre.console/pull/1456) - [@​martincostello](https://togithub.com/martincostello) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1477](https://togithub.com/spectreconsole/spectre.console/pull/1477) - [@​slang25](https://togithub.com/slang25) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1289](https://togithub.com/spectreconsole/spectre.console/pull/1289) - [@​thomhurst](https://togithub.com/thomhurst) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1250](https://togithub.com/spectreconsole/spectre.console/pull/1250) - [@​gerardog](https://togithub.com/gerardog) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1489](https://togithub.com/spectreconsole/spectre.console/pull/1489) - [@​yenneferofvengerberg](https://togithub.com/yenneferofvengerberg) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1503](https://togithub.com/spectreconsole/spectre.console/pull/1503) - [@​BlazeFace](https://togithub.com/BlazeFace) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1509](https://togithub.com/spectreconsole/spectre.console/pull/1509) **Full Changelog**: spectreconsole/spectre.console@0.48.0...0.49.0 </details> --- ### Configuration 📅 **Schedule**: Branch creation - "after 9pm,before 6am" in timezone Europe/Zurich, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/buehler/dotnet-operator-sdk). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zMTMuMSIsInVwZGF0ZWRJblZlciI6IjM3LjMxMy4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
…ehler#751) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [Spectre.Console.Testing](https://togithub.com/spectreconsole/spectre.console) | `0.48.0` -> `0.49.0` | [![age](https://developer.mend.io/api/mc/badges/age/nuget/Spectre.Console.Testing/0.49.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/nuget/Spectre.Console.Testing/0.49.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/nuget/Spectre.Console.Testing/0.48.0/0.49.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/nuget/Spectre.Console.Testing/0.48.0/0.49.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>spectreconsole/spectre.console (Spectre.Console.Testing)</summary> ### [`v0.49.0`](https://togithub.com/spectreconsole/spectre.console/releases/tag/0.49.0) [Compare Source](https://togithub.com/spectreconsole/spectre.console/compare/0.48.0...0.49.0) ##### What's Changed - Cleanup Line-Endings by [@​nils-a](https://togithub.com/nils-a) in [https://github.com/spectreconsole/spectre.console/pull/1381](https://togithub.com/spectreconsole/spectre.console/pull/1381) - Added spectre.console.cli to quick-start. by [@​nils-a](https://togithub.com/nils-a) in [https://github.com/spectreconsole/spectre.console/pull/1413](https://togithub.com/spectreconsole/spectre.console/pull/1413) - Fix rendering of ListPrompt for odd pageSizes by [@​nils-a](https://togithub.com/nils-a) in [https://github.com/spectreconsole/spectre.console/pull/1365](https://togithub.com/spectreconsole/spectre.console/pull/1365) - Remove mandelbrot example due to conflicting license by [@​patriksvensson](https://togithub.com/patriksvensson) in [https://github.com/spectreconsole/spectre.console/pull/1426](https://togithub.com/spectreconsole/spectre.console/pull/1426) - Allow specifying a property to ignore the use of build-time packages for versioning and analysis by [@​baronfel](https://togithub.com/baronfel) in [https://github.com/spectreconsole/spectre.console/pull/1425](https://togithub.com/spectreconsole/spectre.console/pull/1425) - Add the possibility to register multiple interceptors by [@​nils-a](https://togithub.com/nils-a) in [https://github.com/spectreconsole/spectre.console/pull/1412](https://togithub.com/spectreconsole/spectre.console/pull/1412) - Added the ITypeResolver to the ExceptionHandler by [@​nils-a](https://togithub.com/nils-a) in [https://github.com/spectreconsole/spectre.console/pull/1411](https://togithub.com/spectreconsole/spectre.console/pull/1411) - Updated typo in commandApp.md by [@​DarqueWarrior](https://togithub.com/DarqueWarrior) in [https://github.com/spectreconsole/spectre.console/pull/1431](https://togithub.com/spectreconsole/spectre.console/pull/1431) - Command with -v displays app version instead of executing the command by [@​FrankRay78](https://togithub.com/FrankRay78) in [https://github.com/spectreconsole/spectre.console/pull/1427](https://togithub.com/spectreconsole/spectre.console/pull/1427) - HelpProvider colors should be configurable by [@​FrankRay78](https://togithub.com/FrankRay78) in [https://github.com/spectreconsole/spectre.console/pull/1408](https://togithub.com/spectreconsole/spectre.console/pull/1408) - Direct contributors to the current CONTRIBUTING.md by [@​tonycknight](https://togithub.com/tonycknight) in [https://github.com/spectreconsole/spectre.console/pull/1435](https://togithub.com/spectreconsole/spectre.console/pull/1435) - Fix deadlock when cancelling prompts by [@​caesay](https://togithub.com/caesay) in [https://github.com/spectreconsole/spectre.console/pull/1439](https://togithub.com/spectreconsole/spectre.console/pull/1439) - Add progress bar value formatter by [@​jsheely](https://togithub.com/jsheely) in [https://github.com/spectreconsole/spectre.console/pull/1414](https://togithub.com/spectreconsole/spectre.console/pull/1414) - Update dependencies and do some clean-up by [@​patriksvensson](https://togithub.com/patriksvensson) in [https://github.com/spectreconsole/spectre.console/pull/1440](https://togithub.com/spectreconsole/spectre.console/pull/1440) - Delete \[UsesVerify], which has become obsolete through the latest update. by [@​danielcweber](https://togithub.com/danielcweber) in [https://github.com/spectreconsole/spectre.console/pull/1456](https://togithub.com/spectreconsole/spectre.console/pull/1456) - Don't erase secret prompt text upon backspace when mask is null by [@​danielcweber](https://togithub.com/danielcweber) in [https://github.com/spectreconsole/spectre.console/pull/1458](https://togithub.com/spectreconsole/spectre.console/pull/1458) - Update dependencies to the latest version by [@​patriksvensson](https://togithub.com/patriksvensson) in [https://github.com/spectreconsole/spectre.console/pull/1459](https://togithub.com/spectreconsole/spectre.console/pull/1459) - Automatically register command settings by [@​patriksvensson](https://togithub.com/patriksvensson) in [https://github.com/spectreconsole/spectre.console/pull/1463](https://togithub.com/spectreconsole/spectre.console/pull/1463) - chore: Update dependency dotnet-example to v3.1.0 by [@​renovate](https://togithub.com/renovate) in [https://github.com/spectreconsole/spectre.console/pull/1470](https://togithub.com/spectreconsole/spectre.console/pull/1470) - chore: Update dependency Roslynator.Analyzers to v4.11.0 by [@​renovate](https://togithub.com/renovate) in [https://github.com/spectreconsole/spectre.console/pull/1473](https://togithub.com/spectreconsole/spectre.console/pull/1473) - Remove \[DebuggerDisplay] from Paragraph by [@​martincostello](https://togithub.com/martincostello) in [https://github.com/spectreconsole/spectre.console/pull/1477](https://togithub.com/spectreconsole/spectre.console/pull/1477) - Selection Prompt Search by [@​slang25](https://togithub.com/slang25) in [https://github.com/spectreconsole/spectre.console/pull/1289](https://togithub.com/spectreconsole/spectre.console/pull/1289) - Update dependency SixLabors.ImageSharp to v3.1.3 by [@​renovate](https://togithub.com/renovate) in [https://github.com/spectreconsole/spectre.console/pull/1486](https://togithub.com/spectreconsole/spectre.console/pull/1486) - Positioned Progress Tasks - Before or After Other Tasks by [@​thomhurst](https://togithub.com/thomhurst) in [https://github.com/spectreconsole/spectre.console/pull/1250](https://togithub.com/spectreconsole/spectre.console/pull/1250) - Added NoStackTrace to ExceptionFormats by [@​gerardog](https://togithub.com/gerardog) in [https://github.com/spectreconsole/spectre.console/pull/1489](https://togithub.com/spectreconsole/spectre.console/pull/1489) - Pipe character for listing options (issue 1434) by [@​FrankRay78](https://togithub.com/FrankRay78) in [https://github.com/spectreconsole/spectre.console/pull/1498](https://togithub.com/spectreconsole/spectre.console/pull/1498) - Improve XmlDoc output by [@​yenneferofvengerberg](https://togithub.com/yenneferofvengerberg) in [https://github.com/spectreconsole/spectre.console/pull/1503](https://togithub.com/spectreconsole/spectre.console/pull/1503) - Revert [`71a5d83`](https://togithub.com/spectreconsole/spectre.console/commit/71a5d830) to undo flickering regression by [@​phil-scott-78](https://togithub.com/phil-scott-78) in [https://github.com/spectreconsole/spectre.console/pull/1504](https://togithub.com/spectreconsole/spectre.console/pull/1504) - AddDelegate uses an abstract type when used in a branch by [@​BlazeFace](https://togithub.com/BlazeFace) in [https://github.com/spectreconsole/spectre.console/pull/1509](https://togithub.com/spectreconsole/spectre.console/pull/1509) - Missing Separator When Headers are Hidden by [@​BlazeFace](https://togithub.com/BlazeFace) in [https://github.com/spectreconsole/spectre.console/pull/1513](https://togithub.com/spectreconsole/spectre.console/pull/1513) - Expose raw arguments on the command context by [@​patriksvensson](https://togithub.com/patriksvensson) in [https://github.com/spectreconsole/spectre.console/pull/1523](https://togithub.com/spectreconsole/spectre.console/pull/1523) - Add token representation to remaining arguments by [@​patriksvensson](https://togithub.com/patriksvensson) in [https://github.com/spectreconsole/spectre.console/pull/1525](https://togithub.com/spectreconsole/spectre.console/pull/1525) ##### New Contributors - [@​baronfel](https://togithub.com/baronfel) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1425](https://togithub.com/spectreconsole/spectre.console/pull/1425) - [@​DarqueWarrior](https://togithub.com/DarqueWarrior) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1431](https://togithub.com/spectreconsole/spectre.console/pull/1431) - [@​tonycknight](https://togithub.com/tonycknight) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1435](https://togithub.com/spectreconsole/spectre.console/pull/1435) - [@​caesay](https://togithub.com/caesay) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1439](https://togithub.com/spectreconsole/spectre.console/pull/1439) - [@​jsheely](https://togithub.com/jsheely) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1414](https://togithub.com/spectreconsole/spectre.console/pull/1414) - [@​danielcweber](https://togithub.com/danielcweber) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1456](https://togithub.com/spectreconsole/spectre.console/pull/1456) - [@​martincostello](https://togithub.com/martincostello) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1477](https://togithub.com/spectreconsole/spectre.console/pull/1477) - [@​slang25](https://togithub.com/slang25) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1289](https://togithub.com/spectreconsole/spectre.console/pull/1289) - [@​thomhurst](https://togithub.com/thomhurst) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1250](https://togithub.com/spectreconsole/spectre.console/pull/1250) - [@​gerardog](https://togithub.com/gerardog) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1489](https://togithub.com/spectreconsole/spectre.console/pull/1489) - [@​yenneferofvengerberg](https://togithub.com/yenneferofvengerberg) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1503](https://togithub.com/spectreconsole/spectre.console/pull/1503) - [@​BlazeFace](https://togithub.com/BlazeFace) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1509](https://togithub.com/spectreconsole/spectre.console/pull/1509) **Full Changelog**: spectreconsole/spectre.console@0.48.0...0.49.0 </details> --- ### Configuration 📅 **Schedule**: Branch creation - "after 9pm,before 6am" in timezone Europe/Zurich, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/buehler/dotnet-operator-sdk). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zMTMuMSIsInVwZGF0ZWRJblZlciI6IjM3LjMxMy4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [Spectre.Console.Analyzer](https://togithub.com/spectreconsole/spectre.console) | `0.48.0` -> `0.49.1` | [![age](https://developer.mend.io/api/mc/badges/age/nuget/Spectre.Console.Analyzer/0.49.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/nuget/Spectre.Console.Analyzer/0.49.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/nuget/Spectre.Console.Analyzer/0.48.0/0.49.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/nuget/Spectre.Console.Analyzer/0.48.0/0.49.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [Spectre.Console.Cli](https://togithub.com/spectreconsole/spectre.console) | `0.48.0` -> `0.49.1` | [![age](https://developer.mend.io/api/mc/badges/age/nuget/Spectre.Console.Cli/0.49.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/nuget/Spectre.Console.Cli/0.49.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/nuget/Spectre.Console.Cli/0.48.0/0.49.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/nuget/Spectre.Console.Cli/0.48.0/0.49.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>spectreconsole/spectre.console (Spectre.Console.Analyzer)</summary> ### [`v0.49.1`](https://togithub.com/spectreconsole/spectre.console/compare/0.49.0...0.49.1) [Compare Source](https://togithub.com/spectreconsole/spectre.console/compare/0.49.0...0.49.1) ### [`v0.49.0`](https://togithub.com/spectreconsole/spectre.console/releases/tag/0.49.0) [Compare Source](https://togithub.com/spectreconsole/spectre.console/compare/0.48.0...0.49.0) #### What's Changed - Cleanup line endings by [@​nils-a](https://togithub.com/nils-a) in [https://github.com/spectreconsole/spectre.console/pull/1381](https://togithub.com/spectreconsole/spectre.console/pull/1381) - Added Spectre.Console.Cli to quick-start. by [@​nils-a](https://togithub.com/nils-a) in [https://github.com/spectreconsole/spectre.console/pull/1413](https://togithub.com/spectreconsole/spectre.console/pull/1413) - Fix rendering of ListPrompt for odd pageSizes by [@​nils-a](https://togithub.com/nils-a) in [https://github.com/spectreconsole/spectre.console/pull/1365](https://togithub.com/spectreconsole/spectre.console/pull/1365) - Remove mandelbrot example due to conflicting license by [@​patriksvensson](https://togithub.com/patriksvensson) in [https://github.com/spectreconsole/spectre.console/pull/1426](https://togithub.com/spectreconsole/spectre.console/pull/1426) - Allow specifying a property to ignore the use of build-time packages for versioning and analysis by [@​baronfel](https://togithub.com/baronfel) in [https://github.com/spectreconsole/spectre.console/pull/1425](https://togithub.com/spectreconsole/spectre.console/pull/1425) - Add the possibility to register multiple interceptors by [@​nils-a](https://togithub.com/nils-a) in [https://github.com/spectreconsole/spectre.console/pull/1412](https://togithub.com/spectreconsole/spectre.console/pull/1412) - Added the ITypeResolver to the ExceptionHandler by [@​nils-a](https://togithub.com/nils-a) in [https://github.com/spectreconsole/spectre.console/pull/1411](https://togithub.com/spectreconsole/spectre.console/pull/1411) - Updated typo in CommandApp.md by [@​DarqueWarrior](https://togithub.com/DarqueWarrior) in [https://github.com/spectreconsole/spectre.console/pull/1431](https://togithub.com/spectreconsole/spectre.console/pull/1431) - Command with -v displays app version instead of executing the command by [@​FrankRay78](https://togithub.com/FrankRay78) in [https://github.com/spectreconsole/spectre.console/pull/1427](https://togithub.com/spectreconsole/spectre.console/pull/1427) - HelpProvider colors should be configurable by [@​FrankRay78](https://togithub.com/FrankRay78) in [https://github.com/spectreconsole/spectre.console/pull/1408](https://togithub.com/spectreconsole/spectre.console/pull/1408) - Direct contributors to the current CONTRIBUTING.md by [@​tonycknight](https://togithub.com/tonycknight) in [https://github.com/spectreconsole/spectre.console/pull/1435](https://togithub.com/spectreconsole/spectre.console/pull/1435) - Fix deadlock when cancelling prompts by [@​caesay](https://togithub.com/caesay) in [https://github.com/spectreconsole/spectre.console/pull/1439](https://togithub.com/spectreconsole/spectre.console/pull/1439) - Add progress bar value formatter by [@​jsheely](https://togithub.com/jsheely) in [https://github.com/spectreconsole/spectre.console/pull/1414](https://togithub.com/spectreconsole/spectre.console/pull/1414) - Update dependencies and do some clean-up by [@​patriksvensson](https://togithub.com/patriksvensson) in [https://github.com/spectreconsole/spectre.console/pull/1440](https://togithub.com/spectreconsole/spectre.console/pull/1440) - Delete \[UsesVerify], which has become obsolete through the latest update. by [@​danielcweber](https://togithub.com/danielcweber) in [https://github.com/spectreconsole/spectre.console/pull/1456](https://togithub.com/spectreconsole/spectre.console/pull/1456) - Don't erase secret prompt text upon backspace when mask is null by [@​danielcweber](https://togithub.com/danielcweber) in [https://github.com/spectreconsole/spectre.console/pull/1458](https://togithub.com/spectreconsole/spectre.console/pull/1458) - Update dependencies to the latest version by [@​patriksvensson](https://togithub.com/patriksvensson) in [https://github.com/spectreconsole/spectre.console/pull/1459](https://togithub.com/spectreconsole/spectre.console/pull/1459) - Automatically register command settings by [@​patriksvensson](https://togithub.com/patriksvensson) in [https://github.com/spectreconsole/spectre.console/pull/1463](https://togithub.com/spectreconsole/spectre.console/pull/1463) - Remove \[DebuggerDisplay] from Paragraph by [@​martincostello](https://togithub.com/martincostello) in [https://github.com/spectreconsole/spectre.console/pull/1477](https://togithub.com/spectreconsole/spectre.console/pull/1477) - Selection Prompt Search by [@​slang25](https://togithub.com/slang25) in [https://github.com/spectreconsole/spectre.console/pull/1289](https://togithub.com/spectreconsole/spectre.console/pull/1289) - Update dependency SixLabors.ImageSharp to v3.1.3 by [@​renovate](https://togithub.com/renovate) in [https://github.com/spectreconsole/spectre.console/pull/1486](https://togithub.com/spectreconsole/spectre.console/pull/1486) - Positioned Progress Tasks - Before or After Other Tasks by [@​thomhurst](https://togithub.com/thomhurst) in [https://github.com/spectreconsole/spectre.console/pull/1250](https://togithub.com/spectreconsole/spectre.console/pull/1250) - Added NoStackTrace to ExceptionFormats by [@​gerardog](https://togithub.com/gerardog) in [https://github.com/spectreconsole/spectre.console/pull/1489](https://togithub.com/spectreconsole/spectre.console/pull/1489) - Pipe character for listing options (issue 1434) by [@​FrankRay78](https://togithub.com/FrankRay78) in [https://github.com/spectreconsole/spectre.console/pull/1498](https://togithub.com/spectreconsole/spectre.console/pull/1498) - Improve XmlDoc output by [@​yenneferofvengerberg](https://togithub.com/yenneferofvengerberg) in [https://github.com/spectreconsole/spectre.console/pull/1503](https://togithub.com/spectreconsole/spectre.console/pull/1503) - Revert [`71a5d83`](https://togithub.com/spectreconsole/spectre.console/commit/71a5d830) to undo flickering regression by [@​phil-scott-78](https://togithub.com/phil-scott-78) in [https://github.com/spectreconsole/spectre.console/pull/1504](https://togithub.com/spectreconsole/spectre.console/pull/1504) - AddDelegate uses an abstract type when used in a branch by [@​BlazeFace](https://togithub.com/BlazeFace) in [https://github.com/spectreconsole/spectre.console/pull/1509](https://togithub.com/spectreconsole/spectre.console/pull/1509) - Missing Separator When Headers are Hidden by [@​BlazeFace](https://togithub.com/BlazeFace) in [https://github.com/spectreconsole/spectre.console/pull/1513](https://togithub.com/spectreconsole/spectre.console/pull/1513) - Expose raw arguments on the command context by [@​patriksvensson](https://togithub.com/patriksvensson) in [https://github.com/spectreconsole/spectre.console/pull/1523](https://togithub.com/spectreconsole/spectre.console/pull/1523) - Add token representation to remaining arguments by [@​patriksvensson](https://togithub.com/patriksvensson) in [https://github.com/spectreconsole/spectre.console/pull/1525](https://togithub.com/spectreconsole/spectre.console/pull/1525) #### New Contributors - [@​baronfel](https://togithub.com/baronfel) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1425](https://togithub.com/spectreconsole/spectre.console/pull/1425) - [@​DarqueWarrior](https://togithub.com/DarqueWarrior) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1431](https://togithub.com/spectreconsole/spectre.console/pull/1431) - [@​tonycknight](https://togithub.com/tonycknight) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1435](https://togithub.com/spectreconsole/spectre.console/pull/1435) - [@​caesay](https://togithub.com/caesay) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1439](https://togithub.com/spectreconsole/spectre.console/pull/1439) - [@​jsheely](https://togithub.com/jsheely) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1414](https://togithub.com/spectreconsole/spectre.console/pull/1414) - [@​danielcweber](https://togithub.com/danielcweber) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1456](https://togithub.com/spectreconsole/spectre.console/pull/1456) - [@​martincostello](https://togithub.com/martincostello) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1477](https://togithub.com/spectreconsole/spectre.console/pull/1477) - [@​slang25](https://togithub.com/slang25) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1289](https://togithub.com/spectreconsole/spectre.console/pull/1289) - [@​thomhurst](https://togithub.com/thomhurst) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1250](https://togithub.com/spectreconsole/spectre.console/pull/1250) - [@​gerardog](https://togithub.com/gerardog) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1489](https://togithub.com/spectreconsole/spectre.console/pull/1489) - [@​yenneferofvengerberg](https://togithub.com/yenneferofvengerberg) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1503](https://togithub.com/spectreconsole/spectre.console/pull/1503) - [@​BlazeFace](https://togithub.com/BlazeFace) made their first contribution in [https://github.com/spectreconsole/spectre.console/pull/1509](https://togithub.com/spectreconsole/spectre.console/pull/1509) **Full Changelog**: spectreconsole/spectre.console@0.48.0...0.49.0 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/ellosoft/aws-cred-mgr). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zMTMuMSIsInVwZGF0ZWRJblZlciI6IjM3LjMyMS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
related to #1405
related to #1093
Changes
The registration of the interceptor is now handled in
ITypeRegistrar
this makes it possible to register multiple interceptors and also to use DI in interceptors.Additionally, an
InterceptResult
-Method was introduced that runs after the command and can be used to alter the result value or to do some cleanup after the command.