Skip to content

Inversion of Control Container

Miért?
Csak azt lehet könnyen konfigurálni, ami nincsen szorosan bedrótozva.

Már a sárga fokozaton megismerkedett a Clean Code fejlesztő a Dependency Inversion Principle-lel. Akkor még a függőséget „kézzel” oldottuk föl. A következő logikus lépés abból áll, hogy a függőségek feloldását automatizáljuk. Ehhez két eljárás áll rendelkezésre:

  • Locator
  • Container

Mindkettő egy úgynevezett Inversion of Control Container-t (IoC konténer) használ. A konténer használata előtt a használt osztályokat el kell helyezni a konténerben. Ezek után a konténer az elhelyezett osztályokból példányokat tud adni. A Locatornál ez explicit történik. Ennek az az előnye, hogy a függőségeket nem kell mind az osztály konstruktorában felsorolni. A keresztmetszeti feladatoknál, mint pl. a loggolás, ez egy általánosan elfogadott eljárás. Azonban a függőségeket rendszerint a konstruktor paraméterében sorolják fel. Ennek az az előnye, hogy minden függőség láthatóvá válik. Így a konténer képes arra, hogy a függőségeket implicit feloldja azáltal, hogy minden szükséges objektumot rekurzív példányosít.

Az IoC konténerek akkor válnak különösen fontossá, amikor az osztályok száma nő. Ha megszívleljük a Separation of Concernst, akkor sok kis osztály keletkezik átlátható feladatokkal. Ezeknek az osztálypéldányoknak összeállítása ennek megfelelően válik költségessé. Éppen itt lép akcióba az IoC konténer, segít a példányosításban és összeköti a sok kis objektumot.

Az IoC konténernek egy további előnye az a tény, hogy meg lehet határozni a konfigurációban egy objektum életciklusát. Amennyiben a futásidőben egy objektumnak csak egyetlen egy példánya létezhet (Singleton), akkor a konténert utasítani lehet, hogy mindig ugyanazt a példány adja vissza. Más életciklusokat is támogat, mint pl. egy példány session-önként.

Ahhoz, hogy a Locator használatakor ne egy bizonyos IoC konténer függőségbe csöppenjünk, lehet a Microsoft Common Service Locator-t (lásd eszközök) használni. Ez egy egységesített interfészt kínál a használatos IoC konténerekhez.

Egy ilyen IoC konténer mechanizmusának megértéséhez hasznos lehet az, hogy egyszer ezt a funkcionalitást magunk implementáljuk. Nem kell a teljes konténert implementálni, elég az alapfunkcióját.

Lásd az eszközök alatt.

Published inPraktikák