Sobes.tech
Middle

ԻոԿ կոնտեյներները ինչ են և ինչ դեր են խաղում C#-ում զարգացման մեջ։

sobes.tech AI

Պատասխան AI-ից

IoC (Ինվերսիա Կառավարման) կոնտեյներները հարթակներ են, որոնք կառավարում են ծրագրում օբյեկտների կյանքի ցիկլը և կախվածությունները: Նրանք իրականացնում են կառավարման հակառակ սկզբունքը՝ հանձնարարելով օբյեկտների ստեղծումը և կառավարումը կոնտեյներին, ոչ թե կոդին, որը այդ օբյեկտները օգտագործում է:

Ռოლი C#-ում զարգացման ժամանակ:

  1. Կախվածությունների կառավարում: IoC կոնտեյներները ավտոմատ կերպով ներդնում են կախվածությունները (այլ օբյեկտներ, որոնցից կախված է տվյալ օբյեկտը) նրա ստեղծման ժամանակ: Սա վերացնում է անհրաժեշտությունը ձեռքով ստեղծելու և փոխանցելու կախվածությունները:
    // Բաց IoC-ով
    public class MyService
    {
        private readonly IDependency _dependency;
    
        public MyService()
        {
            _dependency = new ConcreteDependency(); // Կախվածության ձեռքով ստեղծում
        }
    }
    
    // IoC-ով
    public class MyService
    {
        private readonly IDependency _dependency; // Կախվածությունը կմտցվի կոնտեյներով
    
        public MyService(IDependency dependency) // Կոնստրուկտոր՝ կախվածությունը մտցնելու համար
        {
            _dependency = dependency;
        }
    }
    
  2. Կախվածությունների բացել (decoupling): IoC կոնտեյներները օգնում են առանձնացնել բարձր մակարդակի մոդուլները ցածր մակարդակի մոդուլներից, նպաստելով թույլ կապի։ Կլասները կախված են աբստրակցիաներից (ինտերֆեյսներից), ոչ թե կոնկրետ իրագործումներից։ Կոնտեյները պատասխանատու է աբստրակցիայի կապի համար անհրաժեշտ իրագործման հետ:
  3. Թեստավորման պարզեցում: Քանի որ կախվածությունները ներդրվում են արտաքինից, հեշտ է փոխարինել մոկ-օբյեկտներ կամ խափանիչներ միավորական թեստեր գրելու ժամանակ:
  4. Կյանքի ցիկլի կառավարում: Կոնտեյները կարող է կառավարել օբյեկտների օրինակների ստեղծման ձևը (օրինակ՝ ամեն անգամ նոր, մեկ օրինակ հավելվածի համար (սինգլտոն), մեկ օրինակ հարցումի համար և այլն):
    // Կոնֆիգուրացիայի օրինակ կոնտեյներում (աբստրակցիա, կարող է տարբեր լինել ֆրեյմվորկների միջև)
    //builder.RegisterType<ConcreteDependency>().As<IDependency>().SingleInstance(); // Սինգլտոն
    //builder.RegisterType<ConcreteDependency>().As<IDependency>().InstancePerDependency(); // Ամեն անգամ նոր
    
  5. Կոնֆիգուրացիա և ընդլայնելիություն: Կոնֆիգուրացիան կարող է առանձնացվել առանձին տեղում, ինչը հեշտացնում է ծրագրի վարքագծի փոփոխությունը առանց հիմնական կոդը փոփոխելու:

Հայտնի IoC կոնտեյներներ C# էկոհամակարգում՝ Autofac, Ninject, StructureMap (հնացած), Unity, Microsoft.Extensions.DependencyInjection (ներկա .NET Core և .NET 5+):