Sobes.tech
Junior — Middle

Оё мумкин аст, ки дар дохили контролер як хидмат бо давраи зиндагии Transient истифода шавад?

sobes.tech AI

Ҷавоб аз AI

ҳа, хизмат бо ҳаёти цикли Transient метавонад дар дохили контроллер истифода шавад.

Дар контексти Dependency Injection дар C# (масалан, дар 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 дар контроллер як амалияи стандартӣ мебошад.