Laravel-Core: Por que o Laravel armazena aliases várias vezes?
O Laravel, em seu núcleo no Application.php, registra muitas das Implementações Padrão como esta:
'url' => ['Illuminate\Routing\UrlGenerator', 'Illuminate\Contracts\Routing\UrlGenerator'],
Que chamará o método abaixo duas vezes
public function alias($abstract, $alias)
{
$this->aliases[$alias] = $abstract;
}
resultando nos seguintes valores emContainer->aliases
:
"Illuminate\Routing\UrlGenerator" => "url"
"Illuminate\Contracts\Routing\UrlGenerator" => "url"
Se eu ligar mais tarde:$this->app->alias('url', 'App\Util\Portal\UrlGenerator');
ele ainda armazena um triplo tempo no Container na matriz de alias:
"App\Util\Portal\UrlGenerator" => "url"
Minha pergunta:
Por que o laravel armazena todos os dois ou três e não os substitui? Deve ser suficiente armazenar a classe de concreto. Mas por que o laravel os armazena todos os três? Como o laravel sabe qual deles resolver quando agora uso App :: make ('url')? O Laravel agora tem três opções, uma interface e duas implementações.