是否可以将存储库作为依赖项注入laravel服务文件?

时间:2016-12-22 11:26:58

标签: php laravel service laravel-5 repository

我想做什么 - 1)控制器将依赖于服务的逻辑和东西。 2)服务依赖于存储库进行数据库访问。 3)控制器将服务作为依赖。 4)服务将获取存储库作为依赖。

我的服务类是 -

class AnimeService implements IAnimeService{

    protected $animeRepository;

    public function _construct(IAnimeRepository $_animeRepository) {       
        $this->animeRepository = $_animeRepository;
    }

    public function add(Anime $anime) {      
        return $this->animeRepository->add($anime);
    }
}

问题是 -

Call to a member function add() on null

这是预期的 - 因为_construct永远不会被调用。

顺便说一下;来自我的AppServiceProvider

public function register()
    {
        $this->app->bind('\App\Services\Interfaces\IAnimeService', '\App\Services\Implementations\AnimeService');
        $this->app->bind('\App\Repositories\Interfaces\IAnimeRepository', '\App\Repositories\Implementations\AnimeRepository');
    }

我的问题是 - 1)在这种情况下我可以做些什么来使我的服务工作?

2)最佳做法是什么?

3)还有哪些方法可以实现我的目标?

谢谢。

1 个答案:

答案 0 :(得分:1)

构造函数应该命名为__construct而不是_construct,并带有两个下划线:) 请参阅php文档:http://php.net/manual/en/language.oop5.decon.php

如果您在控制器构造函数中注入AnimeService,Laravel应该自动解析依赖关系,因此只需修改构造函数方法的名称就可以使用您所拥有的内容:)< / p>