Considere que hay dos productos, es decir: el Producto A y el Producto B. El Producto B es un producto virtual que necesito agregar al carrito cuando se le agrega el Producto A.
Para hacerlo, estoy tratando de agregar el Producto B al carrito observando un evento checkout_cart_product_add_after. Una vez que se agrega el Producto A, estoy recuperando la cantidad de producto agregado para el Producto A y, en base a ello, estoy tratando de agregar el Producto B mediante programación. Para agregar el producto B, he escrito el siguiente código:
<?php
namespace MyModule\Applicationcharges\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\App\RequestInterface;
class AddCharges implements ObserverInterface
{
    protected $_productRepository;
    protected $_cart;
    public function __construct(\Magento\Catalog\Model\ProductRepository $productRepository, \Magento\Checkout\Model\Cart $cart){
        $this->_productRepository = $productRepository;
        $this->_cart = $cart;
    }
    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        $item=$observer->getEvent()->getData('quote_item');
        $product=$observer->getEvent()->getData('product');
        $item = ( $item->getParentItem() ? $item->getParentItem() : $item );
        $product->getQty();
        $params = array(
            'product' => 2056,
            'qty' => 1
        );
        $_product = $this->_productRepository->getById(2056);
        $this->_cart->addProduct($_product,$params);
        $this->_cart->save();
    }
}
Sin embargo, intentar agregar un producto usando $this->_cart->addProduct()no funciona. ¿Alguien puede guiar cómo se puede hacer esto? ¿Hay algo que me falta?
Cualquier orientación será apreciada.
fuente

Hice otro formulario, para el cliente registrado y el carrito de invitados
fuente