In una nuova versione di Laravel, non riesco a evitare che i collegamenti IoC sottoposti a override funzionino ovunque nell'applicazione.La classe principale sottoposta a override non funziona quando si lavora nell'artigiano
Supponiamo che un fornitore di servizi sostituisca una classe principale, ad es. cache:
class NewServiceProvider extends ServiceProvider
{
protected $defer = true;
public function register()
{
$this->app->singleton('cache', function($app) {
return new \stdClass; // demo purpose
});
}
public function provides()
{
return ['cache'];
}
}
Il provider viene poi aggiunto in fondo app.providers
config.
Ora modificare routes.php
al seguente e andare a controllare il risultato:
Route::get('/', function() {
dd(app('cache'));
});
// Results in an empty stdClass being shown. It works!
Tuttavia, accendere artisan tinker
e fare lo stesso:
$ php artisan tinker
>>> app('cache')
=> Illuminate\Cache\CacheManager
Improvvisamente l'override non funziona più ..
Lo stesso comportamento si verifica durante l'elaborazione dei listener di eventi ...
È questo comportamento normale e sto trascurando qualcosa? O è una specie di bug?