为什么存储库接口绑定到服务容器

时间:2019-05-21 06:42:54

标签: laravel repository

我们需要在 laravel 应用程序中使用存储库。我们要创建两件重要的事情,一是存储库接口,另一是存储库类

我的疑问是为什么存储库接口和存储库类向服务提供商注册

我从服务提供商处删除了存储库界面和类

显示以下错误

构建时无法实例化目标[App \ Repository \ UserInterface]

<?php

namespace App\Repository\user;


use Illuminate\Support\ServiceProvider;


class UserRepoServiceProvide extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {

    }


    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
       // $this->app->bind('App\Repository\UserInterface', 'App\Repository\user\UserRepository');
    }
}

1 个答案:

答案 0 :(得分:0)

Interface类只是方法的定义(没有它们的主体),因此不能实例化。这意味着您无法执行new App\Repository\UserInterface()

在代码中的某处,您有一个方法(或也许是构造函数?),它具有UserInterface依赖性,类似于

public function myMethod(UserInterface $repository) {
    ...
}
// or
public function __construct(UserInterface $repository) {
    ...
}

如果您删除绑定,Laravel将尝试实例化UserInterface,这将导致您得到错误。 使用接口时,必须始终使用具体的类bind()来实现它们。

我有一个问题,为什么您从ServiceProvider中删除绑定?