Laravel服务提供商不工作


Laravel Service provider not working

我已经将名为CustomerRepository的接口绑定到EloquentCustomerRepository。这是我的CustomerServiceProvider:

public function register()
    {
        $this->app->bind(CustomerRepository::class,EloquentCustomerRepository::class);
        $this->app->bind(PackageRepository::class,EloquentPackageRepository::class);
    }

当我尝试在我的控制器中实例化它时,如下所示:

<?php
namespace App'Http'Controllers'api'v1;
use Lsupport'repositories'api'v1'customer'CustomerRepository;
use App'Http'Controllers'Controller;
use Lsupport'customer'Customer;
use App'Http'Requests;
class CustomerController extends Controller
{
    protected $CustomerRepository;
    public function __construct(CustomerRepository $CustomerRepository)
    {
        $this->CustomerRepository = $CustomerRepository;
    }

它抛出以下错误:

生成[App''Http''Controllers''api''v1''CustomerRepository]时,目标[Lsupport''repositions''api''v1''CustomerRepository]不可实例化。

我还在app.config:中注册了它

App'Providers'CustomerServiceProvider::class,

我做错了什么?

客户服务提供商

<?php
namespace App'Providers;
use Lsupport'repositories'api'v1'customer'EloquentCustomerRepository;
use Lsupport'repositories'api'v1'customer'EloquentPackageRepository;
use Lsupport'repositories'api'v1'customer'CustomerRepository;
use Lsupport'repositories'api'v1'customer'PackageRepository;
use Illuminate'Support'ServiceProvider;
class CustomerServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }
    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->bind(CustomerRepository::class,EloquentCustomerRepository::class);
        $this->app->bind(PackageRepository::class,EloquentPackageRepository::class);
    }
}

客户存储库

    <?php
    namespace Lsupport'repositories'api'v1'Customer;
    interface CustomerRepository
    {
        public function create($request);
    }
**EloquentCustomerRepository**
<?php
namespace Lsupport'repositories'api'v1'customer;
use Lsupport'repositories'api'v1'customer'CusteromRepositoryTrait;
use Lsupport'repositories'api'v1'remain'RightTrait;
use Lsupport'repositories'api'v1'remain'JsonTrait;
use Lsupport'customer'Customer;
class EloquentCustomerRepository implements CustomerRepository
{
    use JsonTrait;
    use RightTrait;
    use CustomerRepositoryTrait;
    code.....

好的,我首先注意到的是,您可能希望在接口和类上使用相同的名称空间。因此,EloquentCustomerRepository的名称空间应该是

namespace Lsupport'repositories'api'v1'Customer;

而不是

namespace Lsupport'repositories'api'v1'customer;

(与较低的客户)。

现在,在CustomerServiceProvider上,您应该使用:

public function register()
{
    $this->app->bind('Lsupport'repositories'api'v1'Customer'CustomerRepository', 'Lsupport'repositories'api'v1'Customer'EloquentCustomerRepository');
}

请确保在命令行上运行composer dumpautoload -o