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.