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.