public function extend($id, callable $extender) : Slot
    {
        if (!isset($this->registered[$id])){
            throw new ComponentNotFoundException($id);
        }
        $slot = $this->slot($id);
        if ($slot->isLocked()){
            throw new SlotIsLockedException($id, $extender);
        }
        // create new object via factory
        $factory = $this->factories[$id];
        if (!$factory || !is_callable($factory) || !method_exists($factory, '__invoke')){
            throw new FactoryNotFoundException($id);
        }
        $this->factories[$id] = function($container) use($extender, $factory, $id, $slot){
            // callback factory to get new instance
            $newInstance = $this->callbackFactory($id, $slot, $factory);
            $extender($newInstance, $container);
            return $newInstance;
        };
        return $slot;
    }