我正在尝试使用laravel服务提供程序来注入依赖项。
namespace App\ABC\Services;
use Exception;
use App\ABC\Models\Nsme;
use GuzzleHttp\Client;
use Illuminate\Http\Response;
class NsmeService
{
/**
* GuzzleHttp client
*
* @var $httpClient
*/
protected $httpClient;
/**
* Create a new service instance.
*
* @param Nsme $nsme
*/
public function __construct(Nsme $nsme)
{
$this->httpClient = $httpClient;
}
public function doApiCall() {
new Client(['base_uri' => 'http://sso.myapiservice.com']);
}
}
在上面的类中,我想修改doApiCall以使用服务laravel提供程序。
我已经写过这样的服务提供商了。
namespace App\ABC\Providers;
use Illuminate\Support\ServiceProvider;
use GuzzleHttp\Client;
class HttpClientServiceProvider extends ServiceProvider
{
/**
* Indicates if loading of the provider is deferred.
*
* @var bool
*/
//protected $defer = false;
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
$this->app->bind('GuzzleHttp\Client', function()
{
return new Client(['base_uri' => 'http://sso.testserver.com']);
});
}
然后我像这样修改了doApiCall()方法
public function doApiCall() {
$client = app('Client');
}
但这不起作用。基本上我想传递一些构造函数参数,所以我不能将Client类作为构造函数参数传递给NsmeService类。任何想法?
答案 0 :(得分:1)
试试这个。
$client = app('GuzzleHttp\Client');
您绑定GuzzleHttp\Client
之类的服务,但称之为Client
。
为避免这种错误,您可以使用\GuzzleHttp\Clint::class
。
另外,不要忘记注册您的服务提供商:)