Junior — Middle
Je možné použiť službu s životným cyklom Transient v rámci kontroléra?
sobes.tech AI
Odpoveď od AI
Áno, služba s životným cyklom Transient môže byť použitá vo vnútri kontroléra.
V kontexte Dependency Injection v C# (napríklad v ASP.NET Core):
- Transient — služba je vytvorená pri každom požiadavke.
- Scoped — služba je vytvorená raz na požiadanie (napríklad, HTTP požiadavka).
- Singleton — služba je vytvorená raz počas celej doby behu aplikácie.
Kontroléry majú zvyčajne životný cyklus Scoped alebo Transient. Ak je kontrolér Scoped, injektovanie Transient služby znamená, že pri vytváraní kontroléra bude vytvorený nový exemplár služby. To je normálne a často sa používa pre služby, ktoré neukladajú stav a sú potrebné iba na vykonanie operácie.
Je dôležité si uvedomiť, že nie je možné injektovať Scoped službu do Singletonu, pretože Scoped služby závisia od kontextu požiadavky.
Príklad injektovania Transient služby do kontroléra:
public interface IMyService { void DoWork(); }
public class MyService : IMyService { public void DoWork() { /*...*/ } }
// V Startup.cs alebo 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();
}
}
Použitie Transient služby v kontroléri je teda štandardnou praxou.