Как получить имена сервисов с помощью Beam :: Wire?

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

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

Кажется, что службы атрибутов не работают.

Вот мой код

# 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 ответ


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

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

my @services = keys %{$wire->config};

Есть идеи?

10000