Sobes.tech
Middle

ASP.NET Core-də asılılıqların injeksiyası (DI) nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Asılılıqların injektsiyası (DI) - bu nəzarətin tərsinə çevrilməsi (IoC) üçün dizayn nümunəsidir və zəif bağlı kod yaratmağa imkan verir. ASP.NET Core-da DI daxili funksiyadır və sinflər arasında asılılıqları asanlıqla idarə etməyə imkan verir.

ASP.NET Core-da DI-nin əsas komponentləri:

  1. Xidmətlər: Funksionallıq təmin edən obyektlər (məsələn, anbar sinfləri, qeydiyyat xidmətləri).
  2. DI konteyneri: Asılılıqları həll etmək və xidmət nümunələri yaratmaq üçün məsul obyekt.
  3. Xidmətlərin həyat dövrü: Nə zaman və necə xidmət nümunələrinin yaradılacağını müəyyən edir:
    • Transient: Hər xidmət sorğusunda yeni nümunə yaradılır.
    • Scoped: Hər sorğu üçün bir nümunə (veb tətbiqlər üçün — hər HTTP sorğusu üçün).
    • Singleton: Birinci sorğuda yaradılır və bütün tətbiqin müddətində istifadə olunur.

DI-nin istifadəsinin üstünlükləri:

  • Zəif bağlılıq: Siniflər abstraksiyalara (interfeyslərə) bağlıdır, konkret həyata keçirmələrə deyil.
  • Test ediləbilərlik: Həqiqi asılılıqları "mocks" və ya "stubs" ilə asanlıqla dəyişdirmək mümkündür.
  • Genişləndiriləbilərlik: Xidmətlərin həyata keçirilməsini dəyişdirmədən asanlıqla dəyişdirmək mümkündür.
  • Asılılıqların idarə olunması: DI konteyneri həyat dövrünü və nümunələrin yaradılmasını idarə edir.

Startup.cs (və ya .NET 6+ üçün Program.cs) daxilində xidmətlərin qeydiyyatı nümunəsi:

// ConfigureServices metodunda
public void ConfigureServices(IServiceCollection services)
{
    // Singleton həyat dövrü ilə xidmətin qeydiyyatı
    services.AddSingleton<ILogger, EmailLogger>();

    // Scoped həyat dövrü ilə xidmətin qeydiyyatı
    services.AddScoped<IDataRepository, SqlDataRepository>();

    // Transient həyat dövrü ilə xidmətin qeydiyyatı
    services.AddTransient<ITransientService, TransientService>();

    // Kontrollerlərin asılılıqların injeksiyası üçün qeydiyyatı
    services.AddControllersWithViews();
}
Kontrollerin konstruktorunda asılılıqların injeksiyası:

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

    // ASP.NET Core DI bu asılılıqları avtomatik həll edir və injektsiya edir
    public HomeController(ILogger logger, IDataRepository repository)
    {
        _logger = logger;
        _repository = repository;
    }

    // ... kontrollerin fəaliyyətləri
}