簡體   English   中英

在我的 Laravel 5.7 工作中使用相同的類注冊不同的服務?

[英]Register Different services using same class in my Laravel 5.7 Jobs?

我的 Laravel 應用程序有以下課程:

namespace App\Api\Consumers

class ShoppingCartApiConsumer
{
   private $baseUrl="https://shopping.example.com";

   private $apiUrl="";

   private $headers=[];

   public function __construct(string $apiKey, string $shoppingCartId)
   {
     $this->apiUrl=$baseUrl."/shoppingCart/$shoppingCartId";
     $this->headers["Authorization"]="Bearer $apiKey"];
   }

   // Rest of methods here
}

我有以下工作:

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;

class PrivateShoppingListConsumer implements ShouldQueue
{
   use Dispatchable;
   use InteractsWithQueue;
   use Queueable;

   private $item;

   public function __construct(string $item)
   {
     $this->item=$item
   }

   public function handle(ShoppingCartApiConsumer $cart):void
   {
      //Logic Implemented here
   }
}
namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;

class WorkShoppingListConsumer implements ShouldQueue
{
   use Dispatchable;
   use InteractsWithQueue;
   use Queueable;

   private $item;

   public function __construct(string $item)
   {
     $this->item=$item
   }

   public function handle(ShoppingCartApiConssumer $cart):void
   {
      if($item != "computer"){
        return;
      }

      //rest of code here

   }
}

PrivateShoppingListConsumer需要以下ShoppingCartApiConsumer實例

$config=config('shoppingCart');
$consumer=new ShoppingListConsumer($config['api_key'],$config['private_shopping_cart_id']);

WorkShoppingListConsumer需要ShoppingListConsumer以下實例:

$config=config('shoppingCart');
$consumer=new ShoppingListConsumer($config['api_key'],$config['work_shopping_cart_id']);

實例初始化的配置如下:

return [
  'api_key' => env("API_KEY"),
  'private_shopping_cart_id' => env("PRIVATE_SHOPPING_CART_ID");
  'work_shopping_cart_id' => env("WORK_SHOPPING_CART_ID");
]

所以我想知道如何使用 laravel 的服務容器將以下實例傳遞給每個作業? 因為WorkShoppingListConsumerPrivateShoppingListConsumer需要適當的類實例才能使我的業務邏輯正常工作。

為此,您需要根據文檔和服務容器文檔定義自定義服務提供者,例如:

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class ShoppingCartApiConsumerProvider extends ServiceProvider
{
  public function register():void
  {
    $config=config('shoppingCart');
    $privateConsumer=new ShoppingListConsumer($config['api_key'],$config['private_shopping_cart_id']);
    $workConsumer=new ShoppingListConsumer($config['api_key'],$config['work_shopping_cart_id']);

    $this->app->bindMethod(PrivateShoppingListConsumer::class.'@handle', function ($job, $app) use ($privateConsumer) {
            return $job->handle($privateConsumer);
});

$this->app->bindMethod(WorkShoppingListConsumer::class.'@handle', function ($job, $app) use ($workConsumer) {
            return $job->handle($workConsumer);
});
    //Append here more jobs on how to be dispatched
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM