É possível usar um serviço com ciclo de vida Transitório dentro de um controlador?
sobes.tech IA
Resposta da IA
Sim, pode usar um serviço com ciclo de vida Transient dentro de um controlador.
No contexto de Dependency Injection em C# (por exemplo, no ASP.NET Core):
- Transient — o serviço é criado sempre que solicitado.
- Scoped — o serviço é criado uma vez por requisição (por exemplo, uma requisição HTTP).
- Singleton — o serviço é criado uma vez durante toda a vida da aplicação.
Os controladores geralmente têm um ciclo de vida Scoped ou Transient. Se o controlador for Scoped, injetar um serviço Transient significa que uma nova instância do serviço será criada ao criar o controlador. Isto é normal e frequentemente usado para serviços que não armazenam estado e são necessários apenas para realizar uma operação.
É importante lembrar que não se pode injetar um serviço Scoped em um Singleton, pois os serviços Scoped dependem do contexto da requisição.
Exemplo de injeção de um serviço Transient num controlador:
public interface IMyService { void DoWork(); }
public class MyService : IMyService { public void DoWork() { /*...*/ } }
// No Startup.cs ou Program.cs
services.AddTransient<IMyService, MyService>();
public class MyController : ControllerBase
{
private readonly IMyService _service;
public MyController(IMyService service)
{
_service = service;
}
public IActionResult Get()
{
_service.DoWork();
return Ok();
}
}
Portanto, usar um serviço Transient num controlador é uma prática padrão.