Middle
ASP.NET Coreдогу көзкарандыуларды инжекторлоо (DI) эмнед?
sobes.tech AI
AIден жооп
Тийиштүүчүлүктөрдү киргизүү (DI) — бул башкаруу көзөмөлүн тескөө (IoC) үчүн дизайн үлгүсү, ал алсыз байланышкан код түзүүгө мүмкүндүк берет. ASP.NET Coreдө DI — бул встроенная функция, ал класстар ортосундагы көзөмөлдөрдү оңой башкарууга мүмкүндүк берет.
ASP.NET Coreдогу DI негизги компоненттери:
- Кызматтар: Функционалдуулукту камсыздаган объекттер (мисалы, репозиторий класстары, логгинг кызматтары).
- DI контейнер: Көзөмөлдөрдү чечүү жана кызматтардын экземплярдарын түзүү үчүн жооптуу объект.
- Кызматтардын жашоо мөөнөтү: Алардын качан жана кандайча түзүлөрүн аныктайт:
- 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;
}
// ... контроллер аракеттери
}