In Magento 2 is een VirtualType een type object dat wordt aangemaakt en geconfigureerd via het Dependency Injection (DI)-mechanisme.

Een VirtualType is geen concrete klasse, maar veeleer een manier om een set argumenten en configuraties te definiëren waarmee on-the-fly een instantie van een object kan worden gegenereerd. Dit is handig wanneer u een object moet creëren dat een complex geheel van afhankelijkheden of configuratie-opties vereist, maar waarvoor u geen concrete klasse wilt aanmaken.

Om een VirtualType in Magento 2 aan te maken, dient u deze eerst te definiëren in het bestand di.xml van uw module.

Om een virtual type te definiëren, geeft u het volgende op in het di.xml-bestand:

name: De naam van het virtual type. Dit moet een unieke identifier zijn die elders in de Magento 2-codebase wordt gebruikt om naar het virtual type te verwijzen.
type: De klasse waarop het virtual type is gebaseerd.
shared: Een Booleaanse waarde die aangeeft of het virtual type een singleton is of niet. Indien ingesteld op true is het virtual type een singleton en wordt slechts één instantie per request aangemaakt. Indien ingesteld op false, wordt telkens wanneer het virtual type wordt aangevraagd een nieuwe instantie gemaakt.

Hier is een voorbeeld:

<virtualType name="MyVirtualType" type="My\Module\Model\MyClass">
    <arguments>
        <argument name="arg1" xsi:type="string">value1</argument>
        <argument name="arg2" xsi:type="string">value2</argument>
    </arguments>
</virtualType>

In dit voorbeeld definiëren we een VirtualType genaamd MyVirtualType, dat een instantie is van de klasse My\Module\Model\MyClass. In de sectie arguments kunt u eventuele argumenten opgeven die de constructor van MyClass vereist. In dit geval geven we twee stringwaarden voor arg1 en arg2 op.

Zodra u uw VirtualType heeft gedefinieerd, kunt u deze in uw code gebruiken door deze als afhankelijkheid te injecteren. Bijvoorbeeld:

use My\Module\Model\MyClass;

class MyController extends \Magento\Framework\App\Action\Action
{
    protected $myVirtualType;

    public function __construct(MyClass $myVirtualType)
    {
        $this->myVirtualType = $myVirtualType;
    }

    public function execute()
    {
        // Gebruik $this->myVirtualType hier
    }
}

In dit voorbeeld injecteren we ons VirtualType MyVirtualType in een controller. Het DI-systeem van Magento 2 maakt automatisch een instantie van MyClass aan met de argumenten die we in het di.xml-bestand hebben opgegeven, en geeft deze door aan de constructor van de controller.

Het gebruik van VirtualTypes in Magento 2 kan uw code vereenvoudigen en deze modulairder en flexibeler maken.