Sobes.tech
Middle

ASP.NET Coreдогу көзкарандыуларды инжекторлоо (DI) эмнед?

sobes.tech AI

AIден жооп

Тийиштүүчүлүктөрдү киргизүү (DI) — бул башкаруу көзөмөлүн тескөө (IoC) үчүн дизайн үлгүсү, ал алсыз байланышкан код түзүүгө мүмкүндүк берет. ASP.NET Coreдө DI — бул встроенная функция, ал класстар ортосундагы көзөмөлдөрдү оңой башкарууга мүмкүндүк берет.

ASP.NET Coreдогу DI негизги компоненттери:

  1. Кызматтар: Функционалдуулукту камсыздаган объекттер (мисалы, репозиторий класстары, логгинг кызматтары).
  2. DI контейнер: Көзөмөлдөрдү чечүү жана кызматтардын экземплярдарын түзүү үчүн жооптуу объект.
  3. Кызматтардын жашоо мөөнөтү: Алардын качан жана кандайча түзүлөрүн аныктайт:
    • Transient: Ар бир суроо үчүн жаңы экземпляр түзүлөт.
    • Scoped: Ар бир суроо үчүн бир экземпляр түзүлөт (веб тиркемелер үчүн — ар бир HTTP суроо үчүн).
    • Singleton: Бир экземпляр биринчи суроодо түзүлөт жана бүт тиркеменин иштөө учурунда колдонулат.

DI колдонуу артыкчылыктары:

  • Алсыз байланыш: Класстар абстракциялардан (интерфейстерден) көз каранды, конкреттүү ишке ашыруулардан эмес.
  • Тестирлөө мүмкүнчүлүгү: Реалдуу көз карандылыктарды "мок" же "стаб" менен оңой алмаштыруу.
  • Кеңейтүү мүмкүнчүлүгү: Кызматтардын ишке ашырууларын өзгөртпөстөн оңой алмаштыруу.
  • Көз карандылыктарды башкаруу: DI контейнеринин жашоо циклин жана экземплярларды түзүүнү башкаруу.

Мисал катары Startup.cs (же Program.cs .NET 6+ ичинде) файлында кызматтарды каттоо:

// ConfigureServices методунда
public void ConfigureServices(IServiceCollection services)
{
    // Singleton жашоо мөөнөтү менен кызматты каттоо
    services.AddSingleton<ILogger, EmailLogger>();

    // Scoped жашоо мөөнөтү менен кызматты каттоо
    services.AddScoped<IDataRepository, SqlDataRepository>();

    // Transient жашоо мөөнөтү менен кызматты каттоо
    services.AddTransient<ITransientService, TransientService>();

    // Контроллерлорду көз карандылыктарды киргизүү үчүн каттоо
    services.AddControllersWithViews();
}

Контроллердун конструкторунда көз карандылыктарды киргизүү:

```csharp
public class HomeController : Controller
{
    private readonly ILogger _logger;
    private readonly IDataRepository _repository;

    // ASP.NET Core DI автоматтык түрдө чечип, киргизет
    public HomeController(ILogger logger, IDataRepository repository)
    {
        _logger = logger;
        _repository = repository;
    }

    // ... контроллер аракеттери
}