我在laravel 5中使用哪个提供程序绑定我的数据库存储库?

时间:2015-10-15 09:16:08

标签: php laravel laravel-5 service-provider

我正在使用laravel 5,我是新手开发人员所以我刚学会了如何使用Repository模式。现在作为新手,我首先使用routes.php文件将我的UserRepositoryInterface绑定到DbUserRepository,如下所示:

App::bind('UserRepositoryInterface', 'DbUserRepository');

这只是伪装,用上面的代码对namepspaces进行成像。

所以在此之后我意识到有一种称为服务提供者的东西应该包含这样的代码。现在,我在AppServiceProvider文件夹中的Providers重构了此内容,它仍能正常运行。

但是,由于我将拥有更多的存储库,将它们放入AppServiceProvider是一个好主意,还是应该继续为我的存储库创建一个专用的提供程序并将它们绑定到那里?做这个的最好方式是什么?这有标准吗?

1 个答案:

答案 0 :(得分:1)

所以后来我理解这一切都是关于首选项所以我编写了一个RepositoryServiceProvider,其中我将所有存储库契约绑定到所需的实现,如下所示:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

use Archive\Repositories\TenantRepository;
use Archive\Repositories\TenantRepositoryEloquent;

use Archive\Repositories\UserRepository;
use Archive\Repositories\UserRepositoryEloquent;

use Archive\Repositories\OrderRepository;
use Archive\Repositories\OrderRepositoryEloquent;

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

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->bind(TenantRepository::class, TenantRepositoryEloquent::class);
        $this->app->bind(UserRepository::class, UserRepositoryEloquent::class);
        $this->app->bind(OrderRepository::class, OrderRepositoryEloquent::class);
    }
}