2016-11-13 42 views
0

我得到錯誤:Laravel __construct() - 不注入?

GitHubApp::__construct() must be an instance of App\Project\Repositories\GitProviderRepository 

我想Laravel確實某種魔力的時候纔來__construct()所以我沒有把它注入到new GitHubApp();

use App\Project\Repositories\GitProviderRepository; 

    class GitHubApp 
    { 
     private $gitProviderRepository; 

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

在其他類:

return new GitHubApp(); 

回答

2

當調用new GithubApp(),你仗着自己打造GithubApp情況下,Laravel不負責建造該實例。

您必須讓Laravel爲您解決依賴關係。還有的方式來實現這一目標數字:

使用App門面:

App::make(GithubApp::class); 

使用app() helper方法:

app(GithubApp::class); 

或者使用resolve() helper方法:

resolve(GithubApp::class); 

在幕後,你的班級鍵入一個d其相關性將由Illuminate\Container\Container類(Application的父類)解決並實例化。具體由make()build()方法。

希望得到這個幫助! :)

1

可以作爲嘗試:

return app(GitHubApp::class); 

return app()->make(GitHubApp::class) 

它由Laravel強大的IoC容器進行解析沒有任何配置的類。

當一個類型沒有綁定在容器中時,它將使用PHP的Reflection設施來檢查類並讀取構造函數的類型提示。使用這些信息,容器可以自動構建類的一個實例。

Docs

+0

爲了改善您的答案,請解釋您的解決方案與'return new'的不同之處。 'app()'做了什麼? –

+0

回答更新..如果你想了解更多信息,那麼你可以閱讀文檔,它就在那裏。 –