2017-10-31 9 views
0

私は依存性注入を使用して、GuzzleのHTTPクライアントのインスタンスを挿入しています。外部サービスを呼び出すいくつかのデータプロバイダクラスがありますが、そのうちのいくつかはプロキシ経由でルーティングする必要があります。これらのクラスに実装されている空のインターフェイスConnectViaProxyがあります。私は、プロキシオプションを設定しがつがつ食うインスタンスをバインドしたいが、私は使用することはできません。クラスがLaravelのコンテナを使用してインターフェイスを実装する場合、別の実装を提供する方法

$this->app->when(ConnectViaProxy::class) 
    ->needs(GuzzleClient::class) 
    ->give(function(): ProxiedGuzzle { 
     return new ProxiedGuzzle(); 
    }); 

whenは、具体的なクラスではなくインタフェースを必要とするため。ここで

は、プロキシされるべきで、プロバイダの例です:

use GuzzleHttp\Client as GuzzleClient; 

class FooProvider implements Provider, ConnectViaProxy 
{ 
    public function __construct(GuzzleClient $client) 
    { 
     // Should be an instance of ProxiedGuzzle 
     dd($client); 
    } 
} 

そして、プロキシされるべきではない、プロバイダの例:

use GuzzleHttp\Client as GuzzleClient; 

class BarProvider implements Provider 
{ 
    public function __construct(GuzzleClient $client) 
    { 
     // Should be an instance of GuzzleClient 
     dd($client); 
    } 
} 

そして、ここではProxiedGuzzleクラスです。

use GuzzleHttp\Client as GuzzleClient; 

class ProxiedGuzzle extends GuzzleClient 
{ 
    public function __construct() 
    { 
     parent::__construct([ 
      'proxy' => [ 
       'http' => PROXY_IP, 
       'https' => PROXY_IP, 
      ], 
     ]); 
    } 
} 

どうすればいいですか?

おかげ

答えて

1

このような状況のうち唯一の方法は、親クラスを使用しているようです。

/** 
* 
*/ 
class ViaProxy implements ConnectViaProxy 
{ 

    public function __construct(GuzzleClient $client) 
    { 
     // Should be an instance of ProxiedGuzzle 
     dd($client); 
    } 
} 

必要それからちょうど例でそれを使用

/** 
* 
*/ 
class FooProvider extends ViaProxy implements Provider 
{ 

} 

そしてない

use GuzzleHttp\Client as GuzzleClient; 
/** 
* 
*/ 
class BarProvider implements Provider 
{ 
    public function __construct(GuzzleClient $client) 
    { 
     // Should be an instance of GuzzleClient 
     dd($client); 
    } 

使用コンテキストは、通常の

$this->app->when(ViaProxy::class) 
    ->needs(GuzzleClient::class) 
    ->give(function(): ProxiedGuzzle { 
     return new ProxiedGuzzle(); 
    }); 
として結合していない場合
関連する問題