【发布时间】:2015-10-24 04:49:50
【问题描述】:
我有以下课程:
<?php
namespace App\CustomClasses;
class Disqus {
protected $secretKey;
protected $publicKey;
public function __construct()
{
$this->secretKey = 'abc';
$this->publicKey = '123';
}
public function payload()
{
...
}
}
我还创建了一个服务提供者(简化如下),将此类绑定到 IOC 容器:
<?php namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\CustomClasses\Disqus;
class DisqusServiceProvider extends ServiceProvider {
public function register()
{
$this->app->singleton('Disqus', function() {
return new Disqus();
});
}
public function boot()
{
//
}
}
在我的控制器中:
<?php
use App\CustomClasses\Disqus;
class ArticlesController extends Controller {
public function view(Disqus $disqus)
{
...
//$disqus = App::make('Disqus');
return View::make('articles.view', compact(array('disqus')));
}
}
问题是每当我使用$disqus 变量时,它都不是从服务提供者“生成”的,而是从 Disqus 类本身。
但是,当我有$disqus = App::make('Disqus'); 时,变量会通过服务提供者。
所以我的问题是,由于绑定存在于服务提供者中,$disqus 变量不应该直接来自 DisqusServiceProvider 而不是 Disqus 类我在控制器中使用它?
我错过了什么吗?
提前感谢您的帮助。
【问题讨论】:
标签: php dependency-injection laravel-5 ioc-container service-provider