我已经将名为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
。