Middle
რა არის დამოკიდებულებების ინექცია (DI) ASP.NET Core-ში?
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;
}
// ... კონტროლერის მოქმედებები
}