I have the following attribute:
public class MultipleInteractivitiesAttribute : CheckBaseAttribute
{
private readonly IInteractivityService _interactivityService;
public MultipleInteractivitiesAttribute(IInteractivityService interactivityService)
{
_interactivityService = interactivityService;
}
public override Task<bool> ExecuteCheckAsync(CommandContext ctx, bool help)
{
var userId = ctx.User.Id;
var cmdName = ctx.Command.QualifiedName;
return Task.FromResult(!_interactivityService.CheckForUserInteractivity(userId, cmdName));
}
}
And the following class which has a method I use the attribute on.
public class RecruitmentModule : BaseCommandModule
{
private readonly IInteractivityService _interactivityService;
public RecruitmentModule(IInteractivityService interactivityService)
{
_interactivityService = interactivityService;
}
[Command("apply"), MultipleInteractivities()]
public async Task Apply(CommandContext ctx)
{
// some code here
}
}
Now I get a problem when I use the MultipleInteractivities as attribute above the Apply method. It expects me to pass an argument to its constructor.
Now since I already inject IInteractivityService in the constructor of the RecruitmentModule class. I try to pass it as an argument to my MultipleInteractivities attribute.
Like this:
[Command("apply"), MultipleInteractivities(_interactivityService)]
However, this gives the following error:
Cannot access non-static field '_interactivityService' in static context
So I try to make _interactivityService field static in the RecruitmentModule class like this:
private static IInteractivityService _interactivityService;
Now I get the following error when it is passed as an argument to my MultipleInteractivities attributes.
Attribute constructor parameter 'interactivityService' has type 'DiscordBot.Core.Interfaces.IInteractivityService', which is not a valid attribute parameter type
How can I get IInteractivityService passed to my MultipleInteractivitiesAttribute without getting errors.