Почему получаю ошибку 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);

то все работает. Но мне нужны разные реализации.


Ответы (0 шт):