@@ -329,19 +329,24 @@ namespace Discord.Interactions.Builders | |||||
internal ModuleInfo Build (InteractionService interactionService, IServiceProvider services, ModuleInfo parent = null) | internal ModuleInfo Build (InteractionService interactionService, IServiceProvider services, ModuleInfo parent = null) | ||||
{ | { | ||||
var moduleInfo = new ModuleInfo(this, interactionService, services, parent); | |||||
IInteractionModuleBase instance = ReflectionUtils<IInteractionModuleBase>.CreateObject(TypeInfo, interactionService, services); | |||||
try | |||||
{ | |||||
instance.OnModuleBuilding(interactionService, moduleInfo); | |||||
} | |||||
finally | |||||
if (TypeInfo is not null && ModuleClassBuilder.IsValidModuleDefinition(TypeInfo)) | |||||
{ | { | ||||
( instance as IDisposable )?.Dispose(); | |||||
var instance = ReflectionUtils<IInteractionModuleBase>.CreateObject(TypeInfo, interactionService, services); | |||||
try | |||||
{ | |||||
instance.Construct(this, interactionService); | |||||
var moduleInfo = new ModuleInfo(this, interactionService, services, parent); | |||||
instance.OnModuleBuilding(interactionService, moduleInfo); | |||||
return moduleInfo; | |||||
} | |||||
finally | |||||
{ | |||||
(instance as IDisposable)?.Dispose(); | |||||
} | |||||
} | } | ||||
return moduleInfo; | |||||
else | |||||
return new(this, interactionService, services, parent); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -38,10 +38,17 @@ namespace Discord.Interactions | |||||
void AfterExecute (ICommandInfo command); | void AfterExecute (ICommandInfo command); | ||||
/// <summary> | /// <summary> | ||||
/// Method body to be executed before the derived module is built. | |||||
/// Method body to be executed when <see cref="Builders.ModuleBuilder.Build(InteractionService, System.IServiceProvider, ModuleInfo)"/> is called. | |||||
/// </summary> | /// </summary> | ||||
/// <param name="commandService">Command Service instance that built this module.</param> | /// <param name="commandService">Command Service instance that built this module.</param> | ||||
/// <param name="module">Info class of this module.</param> | /// <param name="module">Info class of this module.</param> | ||||
void OnModuleBuilding (InteractionService commandService, ModuleInfo module); | void OnModuleBuilding (InteractionService commandService, ModuleInfo module); | ||||
/// <summary> | |||||
/// Method body to be executed after the automated module creation is completed and before <see cref="Builders.ModuleBuilder.Build(InteractionService, System.IServiceProvider, ModuleInfo)"/> is called. | |||||
/// </summary> | |||||
/// <param name="builder">Builder class of this module.</param> | |||||
/// <param name="commandService">Command Service instance that is building this method.</param> | |||||
void Construct(Builders.ModuleBuilder builder, InteractionService commandService); | |||||
} | } | ||||
} | } |
@@ -29,6 +29,9 @@ namespace Discord.Interactions | |||||
/// <inheritdoc/> | /// <inheritdoc/> | ||||
public virtual void OnModuleBuilding (InteractionService commandService, ModuleInfo module) { } | public virtual void OnModuleBuilding (InteractionService commandService, ModuleInfo module) { } | ||||
/// <inheritdoc/> | |||||
public virtual void Construct (Builders.ModuleBuilder builder, InteractionService commandService) { } | |||||
internal void SetContext (IInteractionContext context) | internal void SetContext (IInteractionContext context) | ||||
{ | { | ||||
var newValue = context as T; | var newValue = context as T; | ||||