Inversion of Control
Den här artikeln eller avsnittet behöver wikiformateras. (utan datum) Hjälp gärna Wikipedia genom att lägga till relevanta interna länkar, kategorier, rubriker med mera. Denna mall är avsedd att anropas genom {{subst:wiki}} |
Inversion of Control eller IoC är en 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 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).
Ex i 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 sk "Container" som kan konfigureras för att använda olika typer av interface-implementationer. Några exempel på sådana är:
PicoContainer(styrs med kod)
NanoConatiner (bygger på Pico men kan konfigueras via xml)
NFactory (PuzzleFramework)
En mer utförlig artikel om Inversion of Control och Dependency Injection kan ni läsa om på Swesecure på adressen:
http://www.swesecure.com
Swesecure artikel om IoC och DI