【发布时间】:2016-01-03 20:25:48
【问题描述】:
我有一个服务提供者,我想用它来将一个类的实例绑定到服务容器:
namespace App\Providers;
use Eluceo\iCal\Component\Calendar;
use Illuminate\Support\ServiceProvider;
class IcalProvider extends ServiceProvider
{
public function register()
{
$this->app->instance('iCal', function () {
return new Calendar(config('calendar.name'));
});
}
}
据我了解the documentation on binding an instance,这允许我将密钥iCal 绑定到服务容器,以便稍后在我的控制器或服务类中我可以键入提示iCal,并且在服务提供者中创建的实例将是用过的。
所以我创建了一个控制器并尝试输入提示我的实例:
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
class CalendarInviteController extends Controller
{
public function download(iCal $ical, $sessionId)
{
dd($ical);
}
}
但是当我这样做时,我得到了错误:
类 App\Http\Controllers\iCal 不存在
是有道理的,因为它应用它在控制器命名空间中寻找一个名为iCal 的类,但它并不存在。该实例没有 use 语句,因为 iCal 只是一个文本键,所以我尝试告诉它查看可能修复它的根命名空间:
public function download(\iCal $ical, $sessionId)
我得到了错误:
类 iCal 不存在
当我阅读resolving from the service container 上的文档部分时,看起来我在控制器中唯一需要做的就是输入提示以获取实例。
我误解了文档吗?
更新
我还应该提到我确实将我的服务提供商添加到我的config/app.php 文件中。
另外,当我创建一个接口时,将其绑定到服务容器,编辑供应商代码以实现所述接口,并注入该接口而不是它的工作原理,但这需要我编辑供应商代码,而我没有想。
【问题讨论】:
标签: php laravel laravel-5 ioc-container laravel-5.1