In Magento 2 un VirtualType è un tipo di oggetto creato e configurato tramite il meccanismo di dependency injection (DI).

Un VirtualType non è una classe concreta, ma piuttosto un modo per definire un insieme di argomenti e configurazioni utilizzabili per generare al volo un'istanza di un oggetto. Può tornare utile quando occorre creare un oggetto che richiede un insieme complesso di dipendenze o opzioni di configurazione, ma non si desidera creare una classe concreta per esso.

Per creare un VirtualType in Magento 2, occorre innanzitutto definirlo nel file di.xml del Suo modulo.

Per definire un virtual type, occorre specificare quanto segue nel file di.xml:

name: il nome del virtual type. Deve essere un identificatore univoco utilizzato per riferirsi al virtual type in altre parti del codice di Magento 2.
type: la classe sulla quale è basato il virtual type.
shared: un valore booleano che indica se il virtual type è un singleton o no. Se impostato a true, il virtual type sarà un singleton e verrà creata una sola istanza per richiesta. Se impostato a false, verrà creata una nuova istanza ogni volta che il virtual type viene richiesto.

Ecco un esempio:

<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 questo esempio definiamo un VirtualType chiamato MyVirtualType, che è un'istanza della classe My\Module\Model\MyClass. La sezione arguments consente di specificare gli eventuali argomenti richiesti dal costruttore di MyClass. In questo caso forniamo due valori stringa per arg1 e arg2.

Una volta definito il Suo VirtualType, può utilizzarlo nel Suo codice iniettandolo come dipendenza. Ad esempio:

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()
    {
        // Use $this->myVirtualType here
    }
}

In questo esempio iniettiamo il nostro VirtualType MyVirtualType in un controller. Il sistema DI di Magento 2 creerà automaticamente un'istanza di MyClass con gli argomenti specificati nel file di.xml e la passerà al costruttore del controller.

L'utilizzo dei VirtualType in Magento 2 può aiutarLa a semplificare il Suo codice rendendolo più modulare e flessibile.