我正在尝试使用自定义包中的服务提供商:
class ReferralsServiceProvider extends ServiceProvider
{
public const PACKAGE_NAME = 'referrals';
/**
* Perform post-registration booting of services.
*
* @return void
*/
public function boot()
{
...
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
$this->app->bind(PreReferralsRepositoryInterface::class, WorkflowPreReferrals::class);
}
服务提供者在包 composer.json 文件中注册,因此它在使用的应用程序中自动注册。
"extra": {
"laravel": {
"providers": [
"Propel\\Referrals\\ReferralsServiceProvider"
]
}
}
但是在我们主应用程序中的一个控制器中:
class ReferalValidationController extends Controller
{
protected $referrals;
public function __construct(PreReferralsRepositoryInterface $referrals)
{
...
}
我收到错误:
Argument 1 passed to App\Http\Controllers\ReferalValidationController::__construct() must be an instance of Propel\Referrals\Repositories\PreReferralsRepositoryInterface, instance of Propel\Referrals\Repositories\WorkflowPreReferrals given
我知道服务提供者已注册的事实,因为我可以将绑定的第二个参数更改为另一个类,然后它将反映在错误中。我是否错过了绑定中的一些关键内容?就好像控制者不知道服务提供者一样。