Вы должны связать полное имя класса вместо:
$this->app->singleton(ResourceContainer::class, function($app){
return new ResourceContainer();
});
И используйте это так же:
$resourceContainer = $this->app->make(ResourceContainer::class);
Проблема в том, что вы имеете дело с двумя разными строками:
'ResourceContainer'
'Foo\Bar\ResourceContainer'
Когда вы связываете 'ResourceContainer'
, ...->make('ResourceContainer')
правильно разрешит ваш синглтон.
Однако при использовании внедрения зависимости:
public function index(ResourceContainer $container, $resource) {}
Laravel пытается найти полное имя класса 'Foo\Bar\ResourceContainer'
из контейнера. Поскольку эта строка не была привязана к контейнеру, Laravel достаточно «умен», чтобы использовать отражение, чтобы автоматически разрешить класс и внедрить новый экземпляр.