Laravel __construct() - 不注入?

Laravel __construct() - without injecting?

我遇到错误:

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

其他class:

return new GitHubApp();

你可以试试:

return app(GitHubApp::class);

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

由Laravel强大的IoC容器完成,无需任何配置即可解析classes。

当容器中没有绑定类型时,它将使用 PHP 的反射功能检查 class 并读取构造函数的类型提示。使用此信息,容器可以自动构建 class.

的实例

Docs

当调用new GithubApp()时,您依靠自己构建GithubApp实例,Laravel不负责构建该实例。

你必须让 Laravel 为你解决依赖关系。有多种方法可以实现此目的:

使用App门面:

App::make(GithubApp::class);

使用app()辅助方法:

app(GithubApp::class);

或使用resolve()辅助方法:

resolve(GithubApp::class);

在幕后,您的 class 类型及其依赖项将由 Illuminate\Container\Container class(Application 的父 class 解析和实例化).具体通过 make()build() 方法。

希望对您有所帮助! :)