Sobes.tech
Junior — Middle

შეგვიძლია transient ცხოვრების ციკლთან ერთად სერვისის გამოყენება კონტროლერში?

sobes.tech AI

პასუხი AI-სგან

დიახ, ტრანსიენტი სიცოცხლის ციკლს მქონე სერვისი შეიძლება გამოყენებულ იქნას კონტროლერში.

C#-ში Dependency Injection კონტექსტში (მაგალითად, ASP.NET Core-ში):

  • Transient — სერვისი იწარმოება ყოველ მოთხოვნაზე.
  • Scoped — სერვისი იწარმოება ერთხელ მოთხოვნის დროს (მაგალითად, HTTP მოთხოვნისას).
  • Singleton — სერვისი იწარმოება ერთხელ მთელი აპლიკაციის მუშაობის განმავლობაში.

კონტროლერები ჩვეულებრივ აქვთ Scoped ან Transient სიცოცხლის ციკლი. თუ კონტროლერი არის Scoped, Transient სერვისის ინექცია ნიშნავს, რომ კონტროლერის შექმნისას ახალი ეგზემპლარი სერვისის გამო იქმნება. ეს ნორმალურია და ხშირად გამოიყენება სერვისებისთვის, რომლებიც არ ინახავენ მდგომარეობას და საჭიროა მხოლოდ ოპერაციის შესრულებისთვის.

მნიშვნელოვანია, რომ 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 სერვისის გამოყენება კონტროლერში არის სტანდარტული პრაქტიკა.