Inversion of Control

Den här artikeln behöver källhänvisningar för att kunna verifieras. (2020-12)
Åtgärda genom att lägga till pålitliga källor (gärna som fotnoter). Uppgifter utan källhänvisning kan ifrågasättas och tas bort utan att det behöver diskuteras på diskussionssidan.

Inversion of Control eller IoC är inom programmering ett designmönster (eller utvecklingsmetod) för att hantera beroenden samt konfigurering av beroenden för ett visst objekt.

Istället för att låta objektet själv instansiera en viss typ av klass känner objektet endast till ett visst gränssnitt (interface) - som bestäms av klienten.

Exempel

Objektet "Stereo" är beroende av objektet "Power" (energikälla) för att fungera. Men istället för att låta Stereo instansiera och referera till en specifik "Power"-klass innehar det endast en deklaration till ett "Interface" som kan utgöras av flera typer av "Power". Exakt vilken implementation av "IPower" som används är upp till klienten att avgöra så detta objekt skickas in till Power-klassen antingen genom dess konstruktor (Constructor Injection) eller via en setter-metod (Setter Injection). På grund av detta förfarande kallas IoC även för Dependency Injection (DI).

Exempel i programspråket C#

//POWER INTERFACE
public interface IPower
{
   public void GivePowerTo(object target);
}
//STEREO
public class Stereo
{
   //DEKLARATION TILL INTERFACE
   private IPower power;

   //CONSTRUCTOR INJECTION - LÅT KLIENTEN ANGE TYP AV IPOWER
   public Stereo(IPower power)
   {
      this.power = power;
   }

   public void PlayMusic()
   {
      //ANVÄND OBJEKTET
      this.power.GivePowerTo(this);
      //osv
   }
}

//KLIENT
public class WindowsApp
{
   public void Start()
   {
      //SKAPA OBJEKT AV KLASS SOM IMPLEMENTERAR IPOWER
      IPower power = new BatteryClassThatImplementsIPower();

      //INSTANSIERA Stereo med power
      Stereo stereo = new Stereo(power);

      //KÖR!
      stereo.PlayMusic();
   }
}

Istället för att låta klienten själv instansiera objektet används ofta en så kallad "Container" som kan konfigureras för att använda olika typer av gränssnittsimplementationer.

v  r
Designmönster inom programmering
Gang of Fours mönster
Skapandemönster
Abstrakt fabrik · Byggare · Fabriksmetod · Prototyp · Singleton
Strukturmönster
Adapter · Brygga · Dekoratör · Fasad · Flugvikt · Komposit · Proxy
Beteendemönster
Ansvarskedja · Besökare · Interpreter · Iterator · Kommando · Mallmetod · Mediator · Memento · Observatör · Strategi · Tillstånd
Arkitektmönster
Model-View-Controller
Personer
Christopher Alexander · Erich Gamma · Ralph Johnson · John Vlissides · Grady Booch · Kent Beck · Ward Cunningham · Martin Fowler · Robert Martin · Jim Coplien · Douglas Schmidt · Linda Rising
Böcker
Design Patterns