Php 目标不可实例化。Laravel 5-应用程序绑定服务提供商

Php 目标不可实例化。Laravel 5-应用程序绑定服务提供商,php,laravel-5,Php,Laravel 5,我收到了这个错误: BindingResolutionException in compiled.php line 1029: Target [App\Models\Contracts\Repositories\IUserRepository] is not instantiable. 我的代码如下: BindingResolutionException in compiled.php line 1029: Target [App\Models\Contracts\Repositories

我收到了这个错误:

BindingResolutionException in compiled.php line 1029:

Target [App\Models\Contracts\Repositories\IUserRepository] is not instantiable.
我的代码如下:

BindingResolutionException in compiled.php line 1029:

Target [App\Models\Contracts\Repositories\IUserRepository] is not instantiable.
接口:

namespace App\Models\Contracts\Repositories;

use App\Models\Objects\DTO\User;

interface IUserRepository
{
    function Create( User $user );
}
混凝土:

namespace App\Models\Concrete\Eloquent;

use App\Models\Contracts\Repositories\IUserRepository;
use App\Models\Objects\DTO\User;

class EqUserRepository implements IUserRepository
{
    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return User
     */
    public function Create( User $user )
    {
        return User::create( [
                    'first_name' => $user->first_name,
                    'last_name' => $user->last_name,
                    'username' => $user->username,
                    'email' => $user->email,
                    'password' => bcrypt( $user->password ),
                ] );
    }

}
服务提供者:

<?php namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider {

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Register any application services.
     *
     * This service provider is a great spot to register your various container
     * bindings with the application. As you can see, we are registering our
     * "Registrar" implementation here. You can add your own bindings too!
     *
     * @return void
     */
    public function register()
    {

            $this->app->bind(
                    'App\Models\Contracts\Repositories\IUserRepository', 
                    'App\Models\Concrete\Eloquent\EqUserRepository'
            );
    }

}
文件夹结构

我还看到,我可能需要在composer.json中声明名称空间,因此我尝试了以下方法以及上述方法:

"autoload": {
        "classmap": [
            "database"
        ],
        "psr-4": {
            "App\\": "app/",
            "App\\Models\\Concrete\\Eloquent\\": "app/Models/Concrete/Eloquent/",
            "App\\Models\\Contracts\\Repositories\\": "app/Models/Contracts/Repositories/",
            "App\\Models\\Objects\\DTO\\": "app/Models/Objects/DTO/"
        }
    },
然后运行
composer dump autoload


我忘记做什么了吗?我注意到compiled.php没有更新

在项目根文件夹的cmd行中运行此函数:

php artisan clear-compiled

如果您也在以下错误中运行:

Container.php第749行中的BindingResolutionException:Target [App\Contracts\TestContract]不可实例化

使用以下命令清除配置缓存:

php artisan config:clear

通过在下面的register方法中添加app/providers/AppServiceProvider中的存储库,我解决了相同的错误

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{

public function register()
    {
        $this->app->register(RepositoryServiceProvider::class); // here
    }
}

我已经将具体的存储库移动到services文件夹,并为其指定了名称空间。仍然是相同的错误。这非常有用。我不得不运行一些其他命令来清除缓存并进行优化
php-artisan-config:clear
php-artisan-clear-compiled
php-artisan-optimize
php-artisan-config:cache
看来你可以帮我。看看这个: