Nette DI konténer
A Nette DI az egyik legérdekesebb Nette könyvtár. Képes lefordított DI konténereket generálni és automatikusan frissíteni, amelyek rendkívül gyorsak és elképesztően könnyen konfigurálhatók.
A DI konténer által létrehozandó szolgáltatásokat általában NEON formátumú konfigurációs fájlok segítségével határozzuk meg. Az előző szakaszban kézzel létrehozott konténer a következőképpen lenne leírva:
A jelölés valóban rövid.
A ArticleFactory
és UserController
osztályok konstruktoraiban deklarált összes függőséget maga
a Nette DI találja meg és adja át az úgynevezett autowiringnek köszönhetően, így a
konfigurációs fájlban nem kell semmit sem megadni. Tehát még ha a paraméterek változnak is, akkor sem kell semmit sem
változtatni a konfigurációban. A Nette automatikusan újratermeli a konténert. Ott tisztán az alkalmazásfejlesztésre
koncentrálhat.
Ha függőségeket akarsz átadni setterek segítségével, akkor használd a setup szekciót erre a célra.
A Nette DI közvetlenül generálja a PHP kódot a konténerhez. Az eredmény így egy .php
fájl, amelyet
megnyithat és tanulmányozhat. Így pontosan láthatja, hogyan működik a konténer. Az IDE-ben is debugolhatod és
végiglépkedhetsz rajta. És ami a legfontosabb: a generált PHP rendkívül gyors.
A Nette DI képes gyári kódot is generálni a mellékelt interfész alapján. Ezért a
ArticleFactory
osztály helyett csak egy interfészt kell létrehoznunk az alkalmazásban:
A teljes példa megtalálható a GitHubon.
Önálló használat
A Nette DI könyvtár felhasználása egy alkalmazásban nagyon egyszerű. Először is telepítsük a Composer segítségével (mert a zip fájlok letöltése annyira elavult):
A következő kód létrehozza a DI konténer egy példányát a config.neon
fájlban tárolt konfigurációnak
megfelelően:
A konténer csak egyszer jön létre, kódja a gyorsítótárba (a __DIR__ . '/temp'
könyvtárba) íródik, és
a későbbi kéréseknél csak onnan olvassa be.
A getService()
vagy a getByType()
metódusok a szolgáltatások létrehozására és lekérdezésére
szolgálnak. Így hozzuk létre a UserController
objektumot:
A fejlesztés során hasznos engedélyezni az automatikus frissítési módot, amikor a konténer automatikusan
újratermelődik, ha bármelyik osztály vagy konfigurációs fájl megváltozik. Csak adjuk meg a true
címet
második argumentumként a ContainerLoader
konstruktorban.
Használat a Nette keretrendszerrel
Amint megmutattuk, a Nette DI használata nem korlátozódik a Nette Frameworkben írt alkalmazásokra, bárhol bevethető mindössze 3 sornyi kóddal. Ha azonban a Nette Frameworkben fejlesztünk alkalmazásokat, a konténer konfigurálását és létrehozását a Bootstrap kezeli.