Skip to main content

IUnitOfWork, DBContext e Ciclo de Vida

  • UnitOfWork e DBContext

  • Esses dois componentes devem ter o ciclo de vida como scoped em uma aplicação .NET

DBContext

  • O DbContext foi projetado para ser transient ou, no máximo, scoped (um por requisição), pois ele mantém o estado das operações de banco de dados durante uma transação.
  • Como singleton, o DbContext seria compartilhado entre todas as requisições, o que pode gerar problemas, especialmente em aplicações web

Ciclo de Vida

  • Singleton não é thread-safe por padrão. Se o serviço manipular dados mutáveis ou sensíveis à concorrência, você precisa implementar mecanismos para garantir a segurança em cenários multithread.
  • Não use singletons para serviços que mantêm o estado da aplicação ou lidam com dados dependentes da requisição, como o DbContext.

Use os ciclos de vida nesses casos

  • Singleton: Use para dados globais e serviços que não têm estado dependente da requisição e precisam de um ponto único de acesso.
  • Scoped: Ideal para serviços que mantêm o estado por requisição (ex.: DbContext, repositórios, UnitOfWork).
  • Transient: Para componentes leves, sem estado, que precisam ser criados cada vez que são utilizados.