Sobes.tech
Junior — Middle

Lehetséges-e egy Transient életciklussal rendelkező szolgáltatást használni egy vezérlőn belül?

sobes.tech MI

Válasz az MI-től

Igen, egy Transient életciklussal rendelkező szolgáltatást lehet használni egy vezérlőn belül.

A Dependency Injection kontextusában C#-ban (például az ASP.NET Core-ban):

  • Transient — a szolgáltatás minden kéréskor létrejön.
  • Scoped — a szolgáltatás egyszer jön létre kérésenként (pl. HTTP kérés).
  • Singleton — a szolgáltatás egyszer jön létre az alkalmazás teljes futása során.

A vezérlők általában Scoped vagy Transient életciklussal rendelkeznek. Ha a vezérlő Scoped, akkor a Transient szolgáltatás injektálása azt jelenti, hogy a vezérlő létrehozásakor egy új példány jön létre a szolgáltatásból. Ez normális, és gyakran használják olyan szolgáltatásokhoz, amelyek nem tárolnak állapotot, és csak egy művelet végrehajtására szükségesek.

Fontos megjegyezni, hogy Scoped szolgáltatást nem lehet injektálni Singletonba, mivel a Scoped szolgáltatások a kérés kontextusától függenek.

Példa Transient szolgáltatás injektálására egy vezérlőbe:

public interface IMyService { void DoWork(); }

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

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

Ezért a Transient szolgáltatás használata egy vezérlőben egy szokásos gyakorlat.