簡體   English   中英

Laravel 服務提供商不工作

[英]Laravel Service provider not working

我已將名為CustomerRepository接口綁定到EloquentCustomerRepository 這是我的CustomerServiceProvider

public function register()
    {
        $this->app->bind(CustomerRepository::class,EloquentCustomerRepository::class);
        $this->app->bind(PackageRepository::class,EloquentPackageRepository::class);
    }

當我嘗試像這樣在我的控制器中實例化它時:

<?php

namespace App\Http\Controllers\api\v1;

use Lsupport\repositories\api\v1\customer\CustomerRepository;
use App\Http\Controllers\Controller;
use Lsupport\customer\Customer;
use App\Http\Requests;

class CustomerController extends Controller
{
    protected $CustomerRepository;

    public function __construct(CustomerRepository $CustomerRepository)
    {
        $this->CustomerRepository = $CustomerRepository;
    }

它引發以下錯誤:

目標 [Lsupport\\repositories\\api\\v1\\Customer\\CustomerRepository] ​​在構建 [App\\Http\\Controllers\\api\\v1\\CustomerController] 時不可實例化。

我也在app.config注冊了它:

App\Providers\CustomerServiceProvider::class,

我究竟做錯了什么?

客戶服務提供者

<?php

namespace App\Providers;

use Lsupport\repositories\api\v1\customer\EloquentCustomerRepository;
use Lsupport\repositories\api\v1\customer\EloquentPackageRepository;
use Lsupport\repositories\api\v1\customer\CustomerRepository;
use Lsupport\repositories\api\v1\customer\PackageRepository;
use Illuminate\Support\ServiceProvider;

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

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->bind(CustomerRepository::class,EloquentCustomerRepository::class);
        $this->app->bind(PackageRepository::class,EloquentPackageRepository::class);
    }
}

客戶資料庫

    <?php

    namespace Lsupport\repositories\api\v1\Customer;

    interface CustomerRepository
    {
        public function create($request);
    }

**EloquentCustomerRepository**

<?php

namespace Lsupport\repositories\api\v1\customer;

use Lsupport\repositories\api\v1\customer\CusteromRepositoryTrait;
use Lsupport\repositories\api\v1\remain\RightTrait;
use Lsupport\repositories\api\v1\remain\JsonTrait;
use Lsupport\customer\Customer;

class EloquentCustomerRepository implements CustomerRepository
{
    use JsonTrait;
    use RightTrait;
    use CustomerRepositoryTrait;

    code.....

好的,我注意到的第一件事是您可能希望在接口和類上使用相同的命名空間。 所以, EloquentCustomerRepository的命名空間應該是

namespace Lsupport\repositories\api\v1\Customer;

並不是

namespace Lsupport\repositories\api\v1\customer;

(與較低的客戶)。

現在,在您的CustomerServiceProvider ,您應該使用:

public function register()
{
    $this->app->bind('Lsupport\repositories\api\v1\Customer\CustomerRepository', 'Lsupport\repositories\api\v1\Customer\EloquentCustomerRepository');
}

確保在命令行上運行composer dumpautoload -o

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM