Почему интерфейс репозитория привязан к сервисному контейнеру - PullRequest
0 голосов
/ 21 мая 2019

Нам нужно использовать репозиторий в приложении 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 голосов
/ 21 мая 2019

Класс Interface является просто определением методов (без их тела), следовательно, не является инстанцируемым.Это означает, что вы не можете выполнить new App\Repository\UserInterface().

. Где-то в вашем коде у вас есть метод (или, возможно, конструктор?), Который принимает зависимость UserInterface, что-то вроде

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

Если вы удалите привязку, Laravel попытается создать экземпляр UserInterface, и это приведет к полученной вами ошибке.При работе с интерфейсами у вас всегда есть bind() их с конкретными классами.

У меня вопрос, почему вы удалили привязку из ServiceProvider?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...