Use DbContext na classe injetada ASP .Net Singleton

Preciso acessar meu banco de dados em uma classe Singleton instanciada na minha classe Startup. Parece que a injeção direta resulta em um DbContext que é descartado.

Estou tendo o erro a seguir:

Não é possível acessar um objeto descartado. Nome do objeto: 'MyDbContext'.

Minha pergunta é dupla: por que isso não funciona e como posso acessar meu banco de dados em uma instância de classe singleton?

Aqui está o meu método ConfigureServices na minha classe Startup:

public void ConfigureServices(IServiceCollection services)
{
    // code removed for brevity

    services.AddEntityFramework().AddSqlServer().AddDbContext<MyDbContext>(
        options =>
        {
            var config = Configuration["Data:DefaultConnection:ConnectionString"];
            options.UseSqlServer(config);
        });

    // code removed for brevity

    services.AddSingleton<FunClass>();
}

Aqui está a minha classe de controlador:

public class TestController : Controller
{
    private FunClass _fun;

    public TestController(FunClass fun)
    {
        _fun = fun;
    }

    public List<string> Index()
    {
        return _fun.GetUsers();
    }
}

Aqui está o meu FunClass:

public class FunClass
{
    private MyDbContext db;

    public FunClass(MyDbContext ctx) {
        db = ctx;
    }

    public List<string> GetUsers()
    {
         var lst = db.Users.Select(c=>c.UserName).ToList();
        return lst;
    }
}

questionAnswers(3)

yourAnswerToTheQuestion