Dependency injection Codeception注入使用页面对象失败

Dependency injection Codeception注入使用页面对象失败,dependency-injection,codeception,Dependency Injection,Codeception,我不熟悉Codeception,但在注入页面对象时遇到了一个问题。当我向页面对象添加以下构造逻辑时,就会出现问题 public function __construct(\AcceptanceTester $I) { $this->tester = $I; } 。。。我从以下登录页面对象示例中获得: 我得到的错误是: [Codeception\Exception\InjectionException] 未能在“MyCest”的实例中注入依赖项。无法创建“页面\登录”的实例。无法创

我不熟悉Codeception,但在注入页面对象时遇到了一个问题。当我向页面对象添加以下构造逻辑时,就会出现问题

public function __construct(\AcceptanceTester $I) {
    $this->tester = $I;
}
。。。我从以下登录页面对象示例中获得:

我得到的错误是:

[Codeception\Exception\InjectionException] 未能在“MyCest”的实例中注入依赖项。无法创建“页面\登录”的实例。无法创建“AcceptanceTester”的实例。未能创建“Codeception\Scenario”的实例。无法解析依赖项“Codeception\TestCase”

这就是我在Cest中注入页面的方式

protected function _inject(\Page\Login $login) {
  $this->login_page = $login;
}
如果删除_构造代码,错误就会消失。这是Codeception中的错误还是我做错了什么

这是我找到的工作

use \AcceptanceTester;
use Page\Login as LoginPage;

class MyCest {
    protected $login_page;
    public function _before(AcceptanceTester $I) {
      $this->login_page = new LoginPage($I);
    }
}

这是预期的行为

您的LoginPage构造函数不应该在DI期间有任何要实例化的参数,所以您的解决方法是使用AcceptanceTester实例初始化LoginPage实例的正确方法

当您将AcceptanceTester指定为LoginPage的ctor arg时,Codeception的DI机制将尝试按以下方式递归解决依赖关系:

LoginPage(AcceptanceTester) -> AcceptanceTester(Scenario) -> Scenario(TestCase) -> TestCase

但TestCase是抽象类,因此无法实例化。

这是预期的行为

您的LoginPage构造函数不应该在DI期间有任何要实例化的参数,所以您的解决方法是使用AcceptanceTester实例初始化LoginPage实例的正确方法

当您将AcceptanceTester指定为LoginPage的ctor arg时,Codeception的DI机制将尝试按以下方式递归解决依赖关系:

LoginPage(AcceptanceTester) -> AcceptanceTester(Scenario) -> Scenario(TestCase) -> TestCase

但是TestCase是抽象类,所以不能实例化。

谢谢你的解释。谢谢你的解释。