2017-10-13 238 views
0

我已經創建了應用服務/服務/ KDataService.php看起來像這樣:Laravel 5.5依賴注入構造方法

class KDataService 
{ 
    /** @var string */ 
    private $license; 

    /** @var string */ 
    private $owner; 

    /** @var string */ 
    private $accessToken; 

    public function __construct($owner, $license) 
    { 
     $this->owner = $owner; 
     $this->license = $license; 

     ... 

    } 

     ... 

} 

在我的控制器之一,我嘗試注入與依賴注入這個服務模式,但我得到以下錯誤:

Unresolvable dependency resolving [Parameter #0 [ $owner ]] in class App\Services\KDataService

我的控制器:

use App\Services\KDataService; 

class DamagePointController extends Controller 
{ 
    /** @var KDataService $kDataService */ 
    private $kDataService; 

    /** 
    * Instantiate a new controller instance. 
    * 
    * @param KDataService $kDataService 
    */ 
    public function __construct(KDataService $kDataService) 
    { 
     $this->kDataService = $kDataService; 
    } 

    ... 

} 

任何人都知道我可以如何傳遞我的$ owner和$ license?

+0

Laravel版本? – FreeLightman

+0

@FreeLightman 5.5,我也會編輯OP – Chris

+0

'$ owner'和'$ licence'類型是什麼? Laravel不知道注入什麼來建立你的'KDataService'。 –

回答

3

問題是您的服務有參數,但您沒有指定它們。有幾種方法可以做到這一點。

使用服務提供商

namespace App\Providers; 

use Riak\Connection; 
use Illuminate\Support\ServiceProvider; 

class kDataServiceServiceProvider extends ServiceProvider 
{ 
    /** 
    * Register bindings in the container. 
    * 
    * @return void 
    */ 
    public function register() 
    { 
     $this->app->bind(KDataService::class, function ($app) { 
      return new KDataService(getOwner(), getLicense()); 
     }); 
    } 
} 

bind可以改變其他方法。見Service Container docs

使用應用程序,使instanse

/* Controller __construct */ 
$this->kDataService = \App::make(KDataService::class, [getOwner(), getLicense()]); 

只需創建類的實例

/* Controller __construct */ 
$this->kDataService = new KDataService(getOwner(), getLicense()); 

getOwner and getLicense改變你的邏輯。通常您可以在控制器內或從$app中檢索它。

一般來說,您需要解決的問題是閱讀文檔中的服務容器和服務提供者。