代码之家  ›  专栏  ›  技术社区  ›  Teoman Tıngır

生成时目标[App\Interfaces\IPostRepository]不可实例化

  •  1
  • Teoman Tıngır  · 技术社区  · 6 年前

    public function register()
    {
        $intPath = "App\Interfaces\\";
        // models come from models() method
        foreach ($this->models() as $model) {
            $interface = $intPath."I" . $model . "Repository::class";
            $repoPath = "App\Repositories\\".$model."\\";
            $this->app->singleton($interface, function ($app) use ($model,$repoPath) {
                $cacheName = $repoPath.$model . "CacheRepository";
                $eloquentName = $repoPath.$model . "EloquentRepository";
                return new $cacheName(new $eloquentName);
            });
        }
    }
    

    我检查了接口和存储库路径,似乎是正确的。但还是给了我这个错误

    public function __construct(IPostRepository $repository)
    {
        $this->post = $repository;
    }
    

    我该怎么解决这个问题?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Saiyan Prince    6 年前

    我不知道是什么让你 singleton . 如果我在你家,我会这样做:

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        $repositoryFileNames = [
            // Write your RepositoryName here in quotes
        ];
    
        foreach ($repositoryFileNames as $key => $fileName) {
    
            // Contracts are interfaces only 
            $this->app->bind(
                "App\\Repositories\\Contracts\\{$fileName}Contract",
                "App\\Repositories\\Classes\\{$fileName}"
            );
        }
    
    }
    

    注意foreach循环中的文件路径。你只用了一个反斜杠,而我只用了两个。。你需要用同样的。。2反斜杠,应该可以解决你的错误。

    另外,请注意,我没有使用 方法。相反,我使用了bind方法。。