Почему получаю ошибку Target [App\Services\Contracts\Cache\ManageCache] is not instantiable?
Хочу связать сервис с интерфейсом через AppServiceProvider и получаю данную ошибку. Предполагаются разные реализации, поэтому использую метод when, как написано в документации.
AppServiceProvider метод register
public function register()
{
$this->app->when(SubmissionController::class)
->needs(ManageCache::class)
->give(function () {
return SubmissionCacheService::class;
});
if ($this->app->isLocal()) {
$this->app->register(\Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class);
}
// $this->app->bind(ManageCache::class, SubmissionCacheService::class);
}
Интерфейс
interface ManageCache
{
public function forgetAll();
public function forgetForUser(User $user);
}
Реализация
class SubmissionCacheService implements ManageCache
{
public function forgetAll()
{
}
public function forgetForUser(User $user)
{
}
}
Вызываю в контроллере
public function index(ManageCache $manageCache)
{
}
При этом если использую в провайдере связку
$this->app->bind(ManageCache::class, SubmissionCacheService::class);
то все работает. Но мне нужны разные реализации.