Sobes.tech
Junior — Middle

Vai kontrolierī var izmantot pakalpojumu ar Transient dzīves ciklu?

sobes.tech AI

Atbilde no AI

Jā, pakalpojums ar dzīves ciklu Transient var tikt izmantots kontrolierī.

C# Dependency Injection kontekstā (piemēram, ASP.NET Core):

  • Transient — pakalpojums tiek izveidots katru reizi, kad tas ir nepieciešams.
  • Scoped — pakalpojums tiek izveidots vienu reizi uz pieprasījumu (piemēram, HTTP pieprasījumu).
  • Singleton — pakalpojums tiek izveidots vienu reizi visa darbības laikā.

Kontrolieri parasti ir ar Scoped vai Transient dzīves ciklu. Ja kontrolieris ir Scoped, tad Transient pakalpojuma injekcija nozīmē, ka, izveidojot kontrolieri, tiks izveidots jauns pakalpojuma instances. Tas ir normāli un bieži tiek izmantots pakalpojumiem, kas nesaglabā stāvokli un ir nepieciešami tikai operācijas veikšanai.

Svarīgi atcerēties, ka Scoped pakalpojumu nevar injicēt Singleton, jo Scoped pakalpojumi ir atkarīgi no pieprasījuma konteksta.

Piemērs, kā injicēt Transient pakalpojumu kontrolierī:

public interface IMyService { void DoWork(); }

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

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

Tādējādi, Transient pakalpojuma izmantošana kontrolierī ir standarta prakse.