Magento 2 enthält eine Reihe von Klassendateien, die entweder vorgeneriert oder sofort generiert werden. Sie leben in
var/generated
Diese generierten Dateien enthalten Factory-Klassen. Aus der Dokumentation geht hervor, dass ein Programmierer Factory-Klassen verwendet, um "nicht injizierbare" Objekte zu instanziieren. Ein "nicht injizierbares" Objekt ist ein Objekt, das nicht über die __constructor
Abhängigkeitsinjektion hinzugefügt werden kann , da für die Instanziierung normalerweise Benutzereingaben erforderlich sind.
Aus der Dokumentation geht nicht hervor, wie Magento 2 weiß, dass es eine Factory-Klasse erzeugen muss. Dieses bisschen
Wenn der Objektmanager im Laufzeitmodus oder im Compiler auf eine nicht vorhandene Factory stößt, generiert der Objektmanager die Factory.
klingt so, als ob ich eine Factory-Klasse im Objekt-Manager (oder, im weiteren Sinne, in den Abhängigkeitsinjektions-Konstruktoren) verwende, die von Magento 2 für mich generiert wird. Aber woher weiß der Objektmanager, dass das, was ich anfordere, eine Fabrik ist?
Es scheint auch zwei Befehle zu geben, um alle generierten Klassen automatisch zu generieren (oder zu "kompilieren"). Wenn Sie einen dieser Befehle ausführen, wird eine große Anzahl von Factory-Klassen generiert. Welche Konfigurations- und / oder Codedateien betrachten diese Befehle, um die erforderlichen Factory-Objekte zu generieren?
Ich weiß, dass eine vollständige Verfolgung des Objektmanagers und / oder des Befehlscodes dies aufdecken würde, aber ich hoffe, diese lange und mühsame Reise zu vermeiden.
quelle
Ich grabe gerade in der gleichen Erbsensuppe. Mein bisheriges Verständnis ist, dass alles, was automatisch generiert
/var/generation
wird, über die in deklarierten Einstellungen und Schnittstellen erfolgtapp/etc/di.xml
.Ihre Schnittstellen und Einstellungen werden in der
di.xml
Datei in Ihrer deklariert/app/code/Vendor/<module>/etc/di.xml
.Es kann die Objekte für Sie generieren, da Sie in Ihrem
__constructor
AND eine Schnittstelle deklariert haben und in der entsprechendendi.xml
Datei eine Präferenz für diese Schnittstelle entweder global oder lokal deklariert haben .Ich biete drei Körner Salz mit meinen Kommentaren an.
quelle
di.xml
sieht so aus, als ob Fabriken von einem anderen Ort als den Dateien stammen - Sie können etwas an den Objektmanager senden, der in Factory endet, und es wird eine Datei für Sie generiert.