依赖注入中的实现之间的交替

时间:2019-02-04 19:53:01

标签: php laravel dependency-injection

我有一个b2c商店的静态api,现在我需要使用相同的端点为b2b商店实现它,这两种类型的工作方式都不同,因此实现也有所不同。现在,端点的一个示例如下:


use App\Service\Calculator;

class CartController extends Controller
{
    private $calculator;

    public function __construct(Request $request, Calculator $calculator)
    {
        parent::__construct($request);
        $this->calculator = $calculator
    }

    public function index()
    {
        $this->calculator->calculate();
        return response()->json(['ok'], 200);
    }

}

因此,我想注入一个接口,然后让提供程序决定使用哪种实现。像这样:


namespace App\Service;

interface CalculatorInterface
{
    public function calculate();
}

namespace App\Service;

class Service1 implements CalculatorInterface
{
    public function calculate() { /** */ }
}

namespace App\Service;

class Service2 implements CalculatorInterface
{
    public function calculate() { /** */ }
}

use App\Service\CalculatorInterface;

class CartController extends Controller
{
    private $calculator;

    public function __construct(Request $request, CalculatorInterface $calculator)
    {
        parent::__construct($request);
        $this->calculator = $calculator
    }

    public function index()
    {
        $this->calculator->calculate();
        return response()->json(['ok'], 200);
    }
}

要确定使用哪种类型(b2b或b2c),我需要登录的用户在注册提供程序时无法获得。我可以在控制器中决定哪个实现用户,但是我有很多终结点,因此必须在所有这些终结点中手动完成。 因此,我需要的是在基于用户的依赖项注入中的实现之间交替。 也许在请求的标头中传递参数,然后在提供的内容中进行检查?

0 个答案:

没有答案