Sobes.tech
Middle

IoC konteynerləri nədir və C#-də inkişafda hansı rolu oynayırlar?

sobes.tech Süni İntellekt

AI-dan cavab

IoC (İnversiya Nəzarət) konteynerləri, tətbiqdə obyektlərin həyat dövrünü və asılılıqlarını idarə edən frameworklərdir. Onlar nəzarətin inversiya prinsipini həyata keçirir və obyektlərin yaradılması və idarə olunmasını, bu obyektləri istifadə edən kod yerinə, konteynerə həvalə edir.

C# ilə inkişafda rolu:

  1. Asılılıqların idarə olunması: IoC konteynerləri, obyekt yaradılarkən, avtomatik olaraq asılılıqları (obyektə bağlı digər obyektlər) inject edir. Bu, asılılıqları əl ilə yaratmaq və ötürmək ehtiyacını aradan qaldırır.
    // IoC olmadan
    public class MyService
    {
        private readonly IDependency _dependency;
    
        public MyService()
        {
            _dependency = new ConcreteDependency(); // Əl ilə asılılıq yaradılması
        }
    }
    
    // IoC ilə
    public class MyService
    {
        private readonly IDependency _dependency; // Asılılıq konteyner tərəfindən inject ediləcək
    
        public MyService(IDependency dependency) // Asılılıq injection üçün konstruktor
        {
            _dependency = dependency;
        }
    }
    
  2. Decoupling (ayrılma): IoC konteynerləri, yüksək səviyyəli modulları aşağı səviyyəli modullardan ayırmağa kömək edir, zəif bağlılığı təşviq edir. Sinflər, konkret tətbiqlər deyil, abstraksiyalara (interfeyslər) bağlıdır. Konteyner, abstraksiyanı lazım olan tətbiqlə bağlayır.
  3. Testləri asanlaşdırır: Asılılıqlar xaricdən inject olunduğu üçün, birlik testləri yazarkən, mock və ya stub obyektləri asanlıqla dəyişdirmək mümkündür.
  4. Həyat dövrü idarəetməsi: Konteyner, obyekt nümunələrinin necə yaradılacağını idarə edə bilər (məsələn, hər dəfə yeni, bütün tətbiq üçün tək nümunə (singleton), sorğu üçün nümunə və s.).
    // Konfiqurasiya nümunəsi (abstrakt, frameworklər arasında fərqli ola bilər)
    //builder.RegisterType<ConcreteDependency>().As<IDependency>().SingleInstance(); // Singleton
    //builder.RegisterType<ConcreteDependency>().As<IDependency>().InstancePerDependency(); // Hər dəfə yeni
    
  5. Konfiqurasiya və genişləndirmə: Abstraksiyalar və tətbiqlər arasındakı əlaqələrin konfiqurasiyası xaricə çıxarıla bilər, bu da tətbiqin davranışını dəyişdirməyi, əsas kodu dəyişdirmədən asanlaşdırır.

Populyar IoC konteynerləri C# ekosistemində: Autofac, Ninject, StructureMap (köhnəlmiş), Unity, Microsoft.Extensions.DependencyInjection (daxil edilmiş .NET Core və .NET 5+).