Yucked/Victoria

How do I set up my services when using v6 version ?

Closed this issue · 2 comments

I'm getting this exception on v6 version: No constructor for type 'Victoria.Node.LavaNode' can be instantiated using services from the service container and default values.

I'm using sample from docs for v6+ version.

This is what I use before that:

private readonly DiscordSocketClient _client;
private readonly ServiceProvider _services;
private readonly LavaNode _lavaNode;
public BotHandler() {
    _services = ConfigureServices();
    _client = _services.GetRequiredService<DiscordSocketClient>();
    ...
    _lavaNode = _services.GetRequiredService<LavaNode>();
}

This is my ServiceProvider:

private ServiceProvider ConfigureServices() => new ServiceCollection()
        .AddSingleton<TheSwarmManager.Services.Audio.AudioService>()
        .AddSingleton<LavaNode>()
        .AddSingleton<DiscordSocketClient>()
        .AddSingleton(x => new DiscordSocketClient(new DiscordSocketConfig {
            GatewayIntents = Discord.GatewayIntents.All,
            LogGatewayIntentWarnings = false,
            AlwaysDownloadUsers = true,
            UseInteractionSnowflakeDate = false
        }))

        .AddLogging(config =>
            config.AddDebug().AddConsole()
        )

       ...

        .BuildServiceProvider();
private ServiceProvider ConfigureServices() => new ServiceCollection()
        .AddSingleton<TheSwarmManager.Services.Audio.AudioService>()
        .AddSingleton<LavaNode>()
        .AddSingleton<DiscordSocketClient>()
        .AddLavaNode(...) // like this
        .AddSingleton(x => new DiscordSocketClient(new DiscordSocketConfig {
            GatewayIntents = Discord.GatewayIntents.All,
            LogGatewayIntentWarnings = false,
            AlwaysDownloadUsers = true,
            UseInteractionSnowflakeDate = false
        }))

        .AddLogging(config =>
            config.AddDebug().AddConsole()
        )

       ...

        .BuildServiceProvider();
private ServiceProvider ConfigureServices() => new ServiceCollection()
        .AddSingleton<TheSwarmManager.Services.Audio.AudioService>()
        .AddSingleton<LavaNode>()
        .AddSingleton<DiscordSocketClient>()
        .AddLavaNode(...) // like this
        .AddSingleton(x => new DiscordSocketClient(new DiscordSocketConfig {
            GatewayIntents = Discord.GatewayIntents.All,
            LogGatewayIntentWarnings = false,
            AlwaysDownloadUsers = true,
            UseInteractionSnowflakeDate = false
        }))

        .AddLogging(config =>
            config.AddDebug().AddConsole()
        )

       ...

        .BuildServiceProvider();

Thank you! That worked, I for some reason couldn't find that method before, I thought it was removed, lol. Ty again!