Хлеб:: Доска сервиса B зависит от средства доступа к сервису A
Используя Bread::Board у меня есть объект / сервис A
с аксессуаром $A->foo
, Объект / услуга B зависит от $A->Foo
потому что это consttructor. Как бы я это сделал? Вот пример того, что у меня есть
use Moose;
use Bread::Board;
has info => ( is => 'ro', lazy => 1, isa => 'Str', default => sub { 'something' } );
extends 'Bread::Board::Container';
sub BUILD {
my $self = shift;
container $self => as {
service info => $self->info;
service A => (
class => 'A',
dependencies => {
info => depends_on('info'),
},
);
service B => (
class => 'B',
dependencies => {
foo => depends_on('foo'), # foo could be gotten by
}, # ->resolve( service => 'A' )->foo
); # e.g foo is an accessor on A
};
}
Я не уверен, какой код я мог бы добавить или должен был сделать эту работу.
1 ответ
Решение
Наилучший способ, который я нашел на данный момент, - добавить еще один сервис, используя блок только для этого метода доступа.
use Moose;
use Bread::Board;
has info => ( is => 'ro', lazy => 1, isa => 'Str', default => sub { 'something' } );
extends 'Bread::Board::Container';
sub BUILD {
my $self = shift;
container $self => as {
service info => $self->info;
service A => (
class => 'A',
dependencies => {
info => depends_on('info'),
},
);
service B => (
class => 'B',
dependencies => {
foo => depends_on('foo'), # foo could be gotten by
}, # ->resolve( service => 'A' )->foo
); # e.g foo is an accessor on A
# ADD SERVICE
service foo => (
block => sub {
my $s = shift;
return $s->param('A')->foo;
},
dependencies => [ 'A' ],
);
};
}
Это, конечно, все предполагает, что A имеет аксессор foo