首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >目标不可实例化。Laravel 5-应用程序绑定服务提供商

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

Stack Overflow用户
提问于 2015-02-18 23:17:38
回答 3查看 21.7K关注 0票数 17

,我得到了一个错误:

代码语言:javascript
运行
复制
BindingResolutionException in compiled.php line 1029:

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

我的代码如下所示:

接口:

代码语言:javascript
运行
复制
namespace App\Models\Contracts\Repositories;

use App\Models\Objects\DTO\User;

interface IUserRepository
{
    function Create( User $user );
}

混凝土:

代码语言:javascript
运行
复制
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 ),
                ] );
    }

}

服务提供者:

代码语言:javascript
运行
复制
<?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'
            );
    }

}

主计长:

代码语言:javascript
运行
复制
namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Contracts\Auth\Guard;
use Illuminate\Contracts\Auth\Registrar;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;

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

class AuthController extends Controller
{
    protected $auth;
    private $userRepository;

    public function __Construct(  
            Guard $auth, 
            IUserRepository $userRepo )
    {
    ...

文件夹结构

我还看到可能需要在我的composer.json中声明名称空间,所以我尝试了以下内容以及上面的内容:

代码语言:javascript
运行
复制
"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

我忘记做什么了吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-19 01:25:25

我注意到compiled.php没有更新。

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

代码语言:javascript
运行
复制
php artisan clear-compiled
票数 21
EN

Stack Overflow用户

发布于 2016-01-13 15:20:24

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

第749行中的BindingResolutionException : Container.php \Contracts\TestContract是不可实例化的。

使用以下方法清除配置缓存:

代码语言:javascript
运行
复制
php artisan config:clear
票数 7
EN

Stack Overflow用户

发布于 2021-04-02 16:03:29

通过在app/providers/AppServiceProvider方法中添加存储库解决了同样的错误,如下所示。

代码语言:javascript
运行
复制
namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{

public function register()
    {
        $this->app->register(RepositoryServiceProvider::class); // here
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28595862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档