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:
- Xidmətlər: Funksionallıq təmin edən obyektlər (məsələn, anbar sinfləri, qeydiyyat xidmətləri).
- DI konteyneri: Asılılıqları həll etmək və xidmət nümunələri yaratmaq üçün məsul obyekt.
- 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
}