如何在提供程序中注册类并在以后传入构造函数依赖项



考虑以下类:

<?php
namespace AppGameBattleServices;
use AppFlareModelsCharacter;
use AppGameBattleValuesLevelUpValue;
class CharacterService {
private $character;
public __construct(Character $character) {
$this->character = $character;
}
public function levelUpCharacter() {
$this->character->update(resolve(LevelUpValue::class)->getLevelAttributes());
}
}

我想在提供程序中注册它,然后在解决它时,传入Character参数。

现在我知道如何注册类,但我不知道如何注册它们,以便在解析它们时可以传入我自己的参数。

我通常将我的类注册为singleton(除了在某些情况下我只使用bind(,但这里有一个例子:

$this->app->singleton(BaseStatValue::class, function ($app) {
return new BaseStatValue();
});

所以我知道我可以做到:

$this->app->singleton(CharacterService::class, function ($app) {
return new CharacterService();
});

但是我现在如何通过物理传递它来解决它,依赖项?我不希望我的代码中有一堆new CharacterService($character),我想从容器中检索Character

以后无法解析依赖项,但可以在CharacterServicesignleton 闭包中构建Character

$this->app->singleton(CharacterService::class, function ($app) {
return new CharacterService($app->make(Character::class));
});

顺便说一句。尽量避免签名,因为它们很难测试

最新更新