From 6bceac8a5e899095057a6895f4363c2796337df8 Mon Sep 17 00:00:00 2001 From: Thomas Freudenberg Date: Mon, 29 Mar 2021 17:44:21 +0200 Subject: [PATCH] enable disposing ITypeResolver --- examples/Cli/Injection/Infrastructure/TypeResolver.cs | 10 +++++++++- src/Spectre.Console/Cli/Internal/CommandExecutor.cs | 2 +- .../Cli/Internal/TypeResolverAdapter.cs | 10 +++++++++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/examples/Cli/Injection/Infrastructure/TypeResolver.cs b/examples/Cli/Injection/Infrastructure/TypeResolver.cs index 50320e2..dde7dc1 100644 --- a/examples/Cli/Injection/Infrastructure/TypeResolver.cs +++ b/examples/Cli/Injection/Infrastructure/TypeResolver.cs @@ -4,7 +4,7 @@ using Spectre.Console.Cli; namespace Injection { - public sealed class TypeResolver : ITypeResolver + public sealed class TypeResolver : ITypeResolver, IDisposable { private readonly IServiceProvider _provider; @@ -17,5 +17,13 @@ namespace Injection { return _provider.GetRequiredService(type); } + + public void Dispose() + { + if (_provider is IDisposable disposable) + { + disposable.Dispose(); + } + } } } diff --git a/src/Spectre.Console/Cli/Internal/CommandExecutor.cs b/src/Spectre.Console/Cli/Internal/CommandExecutor.cs index 3522c36..25553af 100644 --- a/src/Spectre.Console/Cli/Internal/CommandExecutor.cs +++ b/src/Spectre.Console/Cli/Internal/CommandExecutor.cs @@ -76,7 +76,7 @@ namespace Spectre.Console.Cli _registrar.RegisterInstance(typeof(IRemainingArguments), parsedResult.Remaining); // Create the resolver and the context. - var resolver = new TypeResolverAdapter(_registrar.Build()); + using var resolver = new TypeResolverAdapter(_registrar.Build()); var context = new CommandContext(parsedResult.Remaining, leaf.Command.Name, leaf.Command.Data); // Execute the command tree. diff --git a/src/Spectre.Console/Cli/Internal/TypeResolverAdapter.cs b/src/Spectre.Console/Cli/Internal/TypeResolverAdapter.cs index c757c42..e614d26 100644 --- a/src/Spectre.Console/Cli/Internal/TypeResolverAdapter.cs +++ b/src/Spectre.Console/Cli/Internal/TypeResolverAdapter.cs @@ -2,7 +2,7 @@ using System; namespace Spectre.Console.Cli { - internal sealed class TypeResolverAdapter : ITypeResolver + internal sealed class TypeResolverAdapter : ITypeResolver, IDisposable { private readonly ITypeResolver? _resolver; @@ -43,5 +43,13 @@ namespace Spectre.Console.Cli throw CommandRuntimeException.CouldNotResolveType(type, ex); } } + + public void Dispose() + { + if (_resolver is IDisposable disposable) + { + disposable.Dispose(); + } + } } }