Make module service scopes optional (#1997)

Co-Authored-By: Cenk Ergen <57065323+Cenngo@users.noreply.github.com>
This commit is contained in:
Quin Lynch
2021-12-24 10:37:47 -04:00
committed by GitHub
parent 9f124b25ab
commit cb1aad308b
3 changed files with 21 additions and 5 deletions

View File

@@ -130,15 +130,25 @@ namespace Discord.Interactions
switch (RunMode) switch (RunMode)
{ {
case RunMode.Sync: case RunMode.Sync:
{
if (CommandService._autoServiceScopes)
{ {
using var scope = services?.CreateScope(); using var scope = services?.CreateScope();
return await ExecuteInternalAsync(context, args, scope?.ServiceProvider ?? EmptyServiceProvider.Instance).ConfigureAwait(false); return await ExecuteInternalAsync(context, args, scope?.ServiceProvider ?? EmptyServiceProvider.Instance).ConfigureAwait(false);
} }
else
return await ExecuteInternalAsync(context, args, services).ConfigureAwait(false);
}
case RunMode.Async: case RunMode.Async:
_ = Task.Run(async () => _ = Task.Run(async () =>
{
if (CommandService._autoServiceScopes)
{ {
using var scope = services?.CreateScope(); using var scope = services?.CreateScope();
await ExecuteInternalAsync(context, args, scope?.ServiceProvider ?? EmptyServiceProvider.Instance).ConfigureAwait(false); await ExecuteInternalAsync(context, args, scope?.ServiceProvider ?? EmptyServiceProvider.Instance).ConfigureAwait(false);
}
else
await ExecuteInternalAsync(context, args, services).ConfigureAwait(false);
}); });
break; break;
default: default:

View File

@@ -67,7 +67,7 @@ namespace Discord.Interactions
internal readonly LogManager _logManager; internal readonly LogManager _logManager;
internal readonly Func<DiscordRestClient> _getRestClient; internal readonly Func<DiscordRestClient> _getRestClient;
internal readonly bool _throwOnError, _useCompiledLambda, _enableAutocompleteHandlers; internal readonly bool _throwOnError, _useCompiledLambda, _enableAutocompleteHandlers, _autoServiceScopes;
internal readonly string _wildCardExp; internal readonly string _wildCardExp;
internal readonly RunMode _runMode; internal readonly RunMode _runMode;
internal readonly RestResponseCallback _restResponseCallback; internal readonly RestResponseCallback _restResponseCallback;
@@ -156,6 +156,7 @@ namespace Discord.Interactions
_wildCardExp = config.WildCardExpression; _wildCardExp = config.WildCardExpression;
_useCompiledLambda = config.UseCompiledLambda; _useCompiledLambda = config.UseCompiledLambda;
_enableAutocompleteHandlers = config.EnableAutocompleteHandlers; _enableAutocompleteHandlers = config.EnableAutocompleteHandlers;
_autoServiceScopes = config.AutoServiceScopes;
_restResponseCallback = config.RestResponseCallback; _restResponseCallback = config.RestResponseCallback;
_genericTypeConverters = new ConcurrentDictionary<Type, Type> _genericTypeConverters = new ConcurrentDictionary<Type, Type>

View File

@@ -47,6 +47,11 @@ namespace Discord.Interactions
/// </remarks> /// </remarks>
public bool EnableAutocompleteHandlers { get; set; } = true; public bool EnableAutocompleteHandlers { get; set; } = true;
/// <summary>
/// Gets or sets whether new service scopes should be automatically created when resolving module depedencies on every command execution.
/// </summary>
public bool AutoServiceScopes { get; set; } = true;
/// <summary> /// <summary>
/// Gets or sets delegate to be used by the <see cref="InteractionService"/> when responding to a Rest based interaction. /// Gets or sets delegate to be used by the <see cref="InteractionService"/> when responding to a Rest based interaction.
/// </summary> /// </summary>