public function make($abstract, $parameters = [])
{
if ($alias = $this->getAlias($abstract)) {
$abstract = $alias;
}
if (isset($this->instances[$abstract])) {
return $this->instances[$abstract];
}
if (!isset($this->binds[$abstract])) {
throw new \InvalidArgumentException(Lang::get('_CONTAINER_MAKE_PARAMS_ERROR_', $abstract));
}
if ($this->binds[$abstract]['concrete'] instanceof \Closure) {
array_unshift($parameters, $this);
$instance = call_user_func_array($this->binds[$abstract]['concrete'], (array) $parameters);
} else {
$concrete = $this->binds[$abstract]['concrete'];
$instance = new $concrete($parameters);
}
$this->binds[$abstract]['singleton'] && ($this->instances[$abstract] = $instance);
return $instance;
}