Inversarea controlului ( IoC ) este un principiu important de programare orientată pe obiecte utilizat pentru a reduce cuplarea (cuplarea) în programele de calculator [1] . Este, de asemenea, o soluție de integrare arhitecturală care simplifică extinderea capabilităților sistemului, în care fluxul de control al programului este controlat de cadru [2] .
Într-un program normal, programatorul decide în ce ordine să efectueze apelurile de procedură. Dar dacă se folosește un framework , programatorul își poate plasa codul în anumite puncte de execuție (folosind callback - uri sau alte mecanisme), apoi rulează „funcția principală” a cadrului care se va ocupa de toată execuția și va apela codul programatorului atunci când este necesar. Ca urmare, există o pierdere a controlului asupra execuției codului - aceasta se numește inversare a controlului (cadru-ul controlează codul programatorului, iar nu programatorul controlează cadrul).
Inversarea controlului se întâmplă nu numai în cadre, ci și în unele biblioteci (dar de obicei bibliotecile nu creează inversarea controlului - ele oferă un set de funcții pe care programatorul trebuie să le apeleze).
O implementare a inversării controlului aplicată managementului dependenței este injectarea dependenței [ 2 ] [ 3] . Injecția de dependență este utilizată în multe cadre numite containere IoC.
În comparație cu tehnologiile de nivel inferior, un container IoC este un linker care colectează nu fișiere obiect , ci obiecte OOP ( instanțele de clasă ) în timpul execuției programului . Evident, pentru a implementa o astfel de idee, a fost necesar să se creeze nu numai linkerul în sine, ci și o fabrică care produce obiecte. Un analog al unui astfel de linker (desigur, mai funcțional) este un compilator , una dintre funcțiile căruia este crearea fișierelor obiect. Ideea de a lega un program în timpul rulării nu este nimic nou. Furnizarea programatorului cu instrumente de injectare a dependenței a oferit mult mai multă flexibilitate în dezvoltare și comoditate în testarea codului [4] .
Toate abordările bazate pe inversarea controlului suferă de următoarele două dezavantaje [5] :