public function getInterfaceDescriptor(string $vendor, string $module, int $interface_type, string $interface)
    {
        if (!array_key_exists($interface_type, $this->nb_interface_list)) {
            throw new ENabuProviderException(
                ENabuProviderException::ERROR_INTERFACE_TYPE_NOT_EXISTS,
                array(print_r($interface_type, true))
            );
        }

        $nb_descriptor = null;

        $this->nb_interface_list[$interface_type]->iterate(
            function ($key, $nb_interface_desc) use ($vendor, $module, $interface, &$nb_descriptor)
            {
                $retval = true;
                $nb_manager = $nb_interface_desc->getManager();
                if ($nb_manager->getVendorKey() === $vendor &&
                    $nb_manager->getModuleKey() === $module &&
                    $nb_interface_desc->getClassName() === $interface
                ) {
                    $nb_descriptor = $nb_interface_desc;
                    $retval = false;
                }
                return $retval;
            }
        );

        return $nb_descriptor;
    }