Sobes.tech
Junior — Middle

Is it possible to use a service with a Transient lifecycle inside a controller?

sobes.tech AI

Answer from AI

Yes, a service with a Transient lifecycle can be used inside a controller.

In the context of Dependency Injection in C# (e.g., in ASP.NET Core):

  • Transient — the service is created each time it is requested.
  • Scoped — the service is created once per scope, such as per HTTP request.
  • Singleton — the service is created once for the lifetime of the application.

Controllers usually have Scoped or Transient lifecycles. If a controller is Scoped, injecting a Transient service means a new instance of the service is created when the controller is instantiated. This is normal and often used for stateless services that are only needed for a single operation.

It is important to remember that Scoped services cannot be injected into Singletons, as Scoped services depend on the request context.

Example of injecting a Transient service into a controller:

public interface IMyService { void DoWork(); }

public class MyService : IMyService { public void DoWork() { /*...*/ } }

// In Startup.cs or 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();
    }
}

Thus, using a Transient service inside a controller is standard practice.