O Magento 2 contém vários arquivos de classe que são pré-gerados ou são gerados em tempo real. Eles vivem em
var/generated
Esses arquivos gerados incluem classes de fábrica. A partir da documentação , entendo que um programador usa classes de fábrica para instanciar objetos "não injetáveis". Um objeto "não injetável" é um objeto que não pode ser adicionado via __constructor
injeção de dependência, geralmente porque requer entrada do usuário para instanciar.
O que não está claro na documentação é como o Magento 2 sabe que precisa gerar uma classe de fábrica. Este pouco
Se uma fábrica inexistente for encontrada pelo gerenciador de objetos no modo de tempo de execução ou compilador, o gerenciador de objetos gerará a fábrica.
faz parecer que se eu usar uma classe de fábrica no gerenciador de objetos (ou, por extensão, nos construtores de injeção de dependência), o Magento 2 a gerará para mim. Mas como o gerente de objetos sabe que o que estou solicitando é uma fábrica?
Além disso, parece haver dois comandos para gerar automaticamente (ou "compilar") todas as classes geradas. A execução de um desses comandos gera um grande número de classes Factory. Quais arquivos de configuração e / ou código esses comandos estão procurando para gerar os objetos de fábrica necessários?
Eu sei que rastrear o gerenciador de objetos e / ou o código de comando até o fim revelaria isso, mas espero evitar essa longa e árdua jornada.
fonte
Estou cavando nesta mesma sopa de ervilha agora. Até agora, meu entendimento é que todo o material gerado automaticamente
/var/generation
é feito a partir das preferências e interfaces declaradas emapp/etc/di.xml
.Interfaces e preferências suas serão declaradas no
di.xml
arquivo no seu/app/code/Vendor/<module>/etc/di.xml
.Ele sabe gerar o (s) objeto (s) para você porque você declarou uma interface no seu
__constructor
AND e declarou uma preferência por essa interface global ou localmente nodi.xml
arquivo apropriado .Ofereço três grãos de sal com meus comentários.
fonte
di.xml
arquivos - você pode enviar algo para o gerenciador de objetos que termina no Factory e ele gera um arquivo para você.