protected function addArgumentDefinition($callable, $alias, $args)
    {
        list($argument, $interface) = $args;

        $value = is_callable($callable)
            ? $this->getArgumentProxy($alias, $interface, $callable)
            : $callable;

        $argumentDefinition = array_key_exists($alias, $this->argumentDefinitions)
            ? $this->argumentDefinitions[$alias]
            : [];

        if ($value instanceof Injection) {
            $argumentDefinition[$argument] = $value->getAlias();
        } else {
            $argumentDefinition[":${argument}"] = $value;
        }

        $this->argumentDefinitions[$alias]  = $argumentDefinition;

        $this->define($alias, $this->argumentDefinitions[$alias]);
    }