Inversion of control ( IoC ) är en viktig objektorienterad programmeringsprincip som används för att reducera koppling (koppling) i datorprogram [1] . Det är också en arkitektonisk integrationslösning som förenklar expansionen av systemkapacitet, där styrflödet av programmet styrs av ramverket [2] .
I ett normalt program bestämmer programmeraren i vilken ordning proceduren ska ringas. Men om ett ramverk används kan programmeraren placera sin kod vid vissa exekveringspunkter (med hjälp av callbacks eller andra mekanismer), sedan köra ramverkets "huvudfunktion" som kommer att hantera all exekvering och anropa programmerarens kod vid behov. Som ett resultat blir det en förlust av kontroll över exekveringen av koden - detta kallas inversion av kontroll (ramverket styr programmerarens kod, och inte programmeraren styr ramverket).
Invertering av kontroll sker inte bara i ramverk, utan också i vissa bibliotek (men vanligtvis skapar bibliotek inte inversion av kontroll - de tillhandahåller en uppsättning funktioner som programmeraren måste anropa).
En implementering av inversion av kontroll som tillämpas på beroendehantering är beroendeinjektion [ 2 ] [ 3] . Beroendeinjektion används i många ramverk som kallas IoC-behållare.
Jämfört med tekniker på lägre nivå är en IoC-behållare en länkare som inte samlar in objektfiler utan OOP - objekt ( klassinstanser ) under programkörning . Uppenbarligen, för att implementera en sådan idé, var det nödvändigt att skapa inte bara länken själv, utan också en fabrik som producerar föremål. En analog till en sådan länk (naturligtvis mer funktionell) är en kompilator , en av funktionerna som är att skapa objektfiler. Tanken på att länka ett program vid körning är ingen nyhet. Att förse programmeraren med verktyg för injicering av beroende har gett mycket mer flexibilitet i utvecklingen och bekvämlighet vid testning av kod [4] .
Alla tillvägagångssätt baserade på inversion av kontroll lider av följande två nackdelar [5] :