2016-04-02 20 views
1

CustomerRepositoryというインターフェイスをEloquentCustomerRepositoryにバインドしました。これは私のCustomerServiceProviderLaravelサービスプロバイダが動作しません

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

私はこのように私のコントローラでそれをインスタンス化しよう:

Target [Lsupport\repositories\api\v1\Customer\CustomerRepository] is not instantiable while building [App\Http\Controllers\api\v1\CustomerController].

私もapp.configでそれを登録:

<?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; 
    } 

それは次のようなエラーがスローされます:

App\Providers\CustomerServiceProvider::class, 

私は間違って何をしていますか?

CustomerServiceProvider

<?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); 
    } 
} 

CustomerRepository

<?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..... 
+0

私の理解では、bind()の2番目の引数はクロージャ 'https:// laravel.com/docs/5.2/container#binding'にする必要があります – Chris

+0

' $ this-> app-> bind( 'CustomerRepository '、' EloquentCustomerRepository ')) '。コントローラ上で 'CustomerRepository'の代わりに' EloquentCustomerRepository'を使用すると、それは機能しますか? –

+0

@milzはい!私がEloquentCustomerRepositoryを使用するとき、それは動作します。私は間違って何をしていますか? – Jamie

答えて

1

[OK]を、私が最初に気づくのは、おそらくインターフェイス上とクラスで同じ名前空間をしたいということです。だから、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を実行していることを確認します。

+0

非常に有用なありがとう! – Jamie

関連する問題