Co-Authored-By: Cenk Ergen <57065323+Cenngo@users.noreply.github.com>pull/2001/head
@@ -131,14 +131,24 @@ namespace Discord.Interactions | |||||
{ | { | ||||
case RunMode.Sync: | case RunMode.Sync: | ||||
{ | { | ||||
using var scope = services?.CreateScope(); | |||||
return await ExecuteInternalAsync(context, args, scope?.ServiceProvider ?? EmptyServiceProvider.Instance).ConfigureAwait(false); | |||||
if (CommandService._autoServiceScopes) | |||||
{ | |||||
using var scope = services?.CreateScope(); | |||||
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 () => | ||||
{ | { | ||||
using var scope = services?.CreateScope(); | |||||
await ExecuteInternalAsync(context, args, scope?.ServiceProvider ?? EmptyServiceProvider.Instance).ConfigureAwait(false); | |||||
if (CommandService._autoServiceScopes) | |||||
{ | |||||
using var scope = services?.CreateScope(); | |||||
await ExecuteInternalAsync(context, args, scope?.ServiceProvider ?? EmptyServiceProvider.Instance).ConfigureAwait(false); | |||||
} | |||||
else | |||||
await ExecuteInternalAsync(context, args, services).ConfigureAwait(false); | |||||
}); | }); | ||||
break; | break; | ||||
default: | default: | ||||
@@ -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> | ||||
@@ -48,6 +48,11 @@ namespace Discord.Interactions | |||||
public bool EnableAutocompleteHandlers { get; set; } = true; | public bool EnableAutocompleteHandlers { get; set; } = true; | ||||
/// <summary> | /// <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> | |||||
/// 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> | ||||
public RestResponseCallback RestResponseCallback { get; set; } = (ctx, str) => Task.CompletedTask; | public RestResponseCallback RestResponseCallback { get; set; } = (ctx, str) => Task.CompletedTask; | ||||