Inverze řízení ( IoC ) je důležitý princip objektově orientovaného programování používaný k omezení vazby (coupling) v počítačových programech [1] . Jedná se také o architektonické integrační řešení, které zjednodušuje rozšíření schopností systému, ve kterém je řídicí tok programu řízen frameworkem [2] .
V normálním programu se programátor rozhodne, v jakém pořadí bude proceduru volat. Ale pokud je použit framework , programátor může umístit svůj kód na určité spouštěcí body (pomocí zpětných volání nebo jiných mechanismů), pak spustit "hlavní funkci" frameworku, která se postará o veškeré provádění a v případě potřeby zavolá programátorův kód. V důsledku toho dochází ke ztrátě kontroly nad prováděním kódu – nazývá se to inverze řízení (framework řídí kód programátora, nikoli programátor řídí framework).
K inverzi řízení dochází nejen ve frameworkech, ale také v některých knihovnách (knihovny ale obvykle nevytvářejí inverzi řízení - poskytují sadu funkcí, které musí programátor volat).
Jednou implementací inverze řízení, jak je aplikována na správu závislostí, je vkládání závislostí [ 2 ] [ 3] . Vstřikování závislostí se používá v mnoha rámcích nazývaných kontejnery IoC.
Ve srovnání s technologiemi nižší úrovně je kontejner IoC linker , který během provádění programu neshromažďuje soubory objektů , ale objekty OOP ( instance tříd ) . Je zřejmé, že k realizaci takové myšlenky bylo nutné vytvořit nejen samotný linker, ale také továrnu , která vyrábí předměty. Analogem takového linkeru (samozřejmě funkčnějším) je kompilátor , jehož jednou z funkcí je vytváření objektových souborů. Myšlenka propojení programu za běhu není nic nového. Poskytnutí nástrojů pro vkládání závislostí programátorovi poskytlo mnohem větší flexibilitu ve vývoji a pohodlí při testování kódu [4] .
Všechny přístupy založené na inverzi řízení trpí následujícími dvěma nevýhodami [5] :