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