Как получить сервисные названия с Beam :: Wire? - PullRequest
0 голосов
/ 18 октября 2018

Мне нужно провести обратный инжиниринг одного проекта Perl, использующего Beam :: Wire для внедрения зависимостей.

Как получить список имен сервисов?

Атрибут services Кажется, не работает.

Вот мой код

# wire.yml
captain:
    class: Person
    args:
        name: Malcolm Reynolds
        rank: Captain
first_officer:
    $class: Person
    name: Zoë Alleyne Washburne
    rank: Commander

# script.pl
use Beam::Wire;
use Data::Dumper;
my $wire = Beam::Wire->new( file => 'wire.yml' );
my $a = $wire->services;
warn Dumper $a;           # shows $VAR1 = {} but I expected [ 'captain', 'first_officer' ]

1 Ответ

0 голосов
/ 18 октября 2018

Атрибут services - это больше кеш, как упомянуто в документации.Он не будет заполнен всеми службами после создания объекта, а только каждым сервисом, так как он создан для вызова get или set.Вы можете передать значение eager для службы конфигурация жизненного цикла , чтобы она кэшировалась сразу после создания объекта.

Если вы просто хотите получить список всех служб верхнего уровняиз файла конфигурации вы можете проверить ключи хеша конфигурации.

my @services = keys %{$wire->config};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...