2017-10-13 192 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中检索它。

一般来说,您需要解决的问题是阅读文档中的服务容器和服务提供者。