using Discord;
using Discord.Commands;
using Discord.WebSocket;

public class ModuleA : ModuleBase
{
    private readonly DatabaseService _database;

    // Dependencies can be injected via the constructor
    public ModuleA(DatabaseService database)
    {
        _database = database;
    }

    public async Task ReadFromDb()
    {
        var x = _database.getX();
        await ReplyAsync(x);
    }
}

public class ModuleB
{

    // Public settable properties will be injected
    public AnnounceService { get; set; }

    // Public properties without setters will not
    public CommandService Commands { get; }

    // Public properties annotated with [DontInject] will not
    [DontInject]
    public NotificationService { get; set; }

    public ModuleB(CommandService commands)
    {
        Commands = commands;
    }

}