ObjectManager工厂的区别是什么?


8

我看到Magento 2有3个工厂类(如果算上抽象的,则有4个工厂类)。

  • \ Magento \ Framework \ ObjectManager \ Factory \ Dynamic \ Developer
  • \ Magento \ Framework \ ObjectManager \ Factory \ Dynamic \ Production
  • \ Magento \ Framework \ ObjectManager \ Factory \ Compiled

以上所有扩展\Magento\Framework\ObjectManager\Factory\AbstractFactory
我以为在开发人员模式下Developer将使用工厂,但有时会使用工厂,而Compiled我无法为此确定条件。

有人可以解释使用每个工厂的时间以及它们之间的区别吗?

Answers:


4

条件在这里:\ Magento \ Framework \ App \ EnvironmentFactory :: createEnvironment

它确实检查当前区域是否存在具有编译内容的文件:“ / var / di / global.ser”,“ / var / di / frontend.ser”和“ /var/di/adminhtml.ser”。

不同之处在于对象管理器的性能。构造函数的依赖关系和插件信息已在这些文件中序列化,因此Object Manager可以更快地实例化对象,而无需使用Reflection和计算依赖关系链。而且,无论您的实例是在开发人员模式还是其他模式下运行,都没有关系。仅根据那些文件的可用性来解析对象管理器工厂。如果对应区域的文件可用,则使用“已编译”工厂,如果文件不可用,则使用“开发人员”工厂。并且“生产”工厂被省去了,并且将从代码库中删除。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.