【发布时间】:2015-12-18 23:12:54
【问题描述】:
Laravel 在 Application.php 的核心中确实注册了很多这样的默认实现:
'url' => ['Illuminate\Routing\UrlGenerator', 'Illuminate\Contracts\Routing\UrlGenerator'],
这将在 effekt 中调用下面的方法两次
public function alias($abstract, $alias)
{
$this->aliases[$alias] = $abstract;
}
在Container->aliases 中产生以下值:
"Illuminate\Routing\UrlGenerator" => "url"
"Illuminate\Contracts\Routing\UrlGenerator" => "url"
如果我以后打电话:
$this->app->alias('url', 'App\Util\Portal\UrlGenerator');
它甚至第三次将其存储在别名数组中的容器中:
"App\Util\Portal\UrlGenerator" => "url"
我的问题:
为什么 laravel 将它们全部存储两个或三个而不覆盖它们?存储具体类应该足够了。 但是为什么 laravel 将这三个都存储起来呢?当我现在使用 App::make('url') 时,laravel 如何判断要解决哪一个? Laravel 现在有三个可供选择,一个接口和两个实现。
【问题讨论】:
标签: php laravel ioc-container