Sobes.tech
Junior — Middle

Is het mogelijk om een service met een Transient levenscyclus binnen een controller te gebruiken?

sobes.tech AI

Antwoord van AI

Ja, een service met een levenscyclus Transient kan binnen een controller worden gebruikt.

In de context van Dependency Injection in C# (bijvoorbeeld in ASP.NET Core):

  • Transient — de service wordt telkens bij aanvraag gemaakt.
  • Scoped — de service wordt één keer per verzoek gemaakt (bijvoorbeeld, een HTTP-verzoek).
  • Singleton — de service wordt één keer gemaakt gedurende de hele levensduur van de applicatie.

Controllers hebben meestal een Scoped of Transient levenscyclus. Als de controller Scoped is, betekent het injecteren van een Transient service dat er bij het maken van de controller een nieuw exemplaar van de service wordt gemaakt. Dit is normaal en wordt vaak gebruikt voor services die geen staat opslaan en alleen nodig zijn om een operatie uit te voeren.

Het is belangrijk om te onthouden dat je geen Scoped service kunt injecteren in een Singleton, omdat Scoped services afhankelijk zijn van de request-context.

Voorbeeld van het injecteren van een Transient service in een controller:

public interface IMyService { void DoWork(); }

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

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

Dus, het gebruik van een Transient service in een controller is een standaardpraktijk.