public function set($id, $value)
    {
        if (!empty($this->locks[$id])) {
            throw new ContainerException("Cannot override locked key {$id}");
        }
        $this->definitions[$id] = $value;
        $this->calcs[$id] = false;
        // unset on override
        unset($this->objects[$id]);
    }