Sobes.tech
Junior — Middle

Басқарушы ішінде Transient өмірлік циклі бар қызметті пайдалану мүмкін бе?

sobes.tech AI

AI-дан жауап

Иә, Transient өмірлік циклі бар қызметті контроллер ішінде қолдануға болады.

C#-та тәуелділікті енгізу контекстінде (мысалы, ASP.NET Core-да):

  • Transient — қызмет әр сұрау кезінде жасалады.
  • Scoped — қызмет бір скопқа, мысалы, HTTP сұрауына, бір рет жасалады.
  • Singleton — қызмет бір рет жасалып, қолдану уақыты бойы сақталады.

Контроллерлер әдетте Scoped немесе Transient өмірлік циклмен жұмыс істейді. Егер контроллер Scoped болса, онда Transient қызметін енгізу кезінде жаңа экземпляр контроллер құрылғанда жаңа қызмет экземпляры да құрылады. Бұл қалыпты жағдай және көбінесе статeless қызметтер үшін қолданылады.

Scoped қызметтерді Singleton-ға енгізбеу керек, себебі Scoped қызметтері сұрау контекстіне тәуелді.

Мысал: Transient қызметін контроллерге енгізу:

public interface IMyService { void DoWork(); }

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

// Startup.cs немесе 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();
    }
}

Осылайша, Transient қызметін контроллер ішінде қолдану — стандартты тәжірибе.