Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 线路板服务B依赖于服务A对象上的访问器_Perl_Inversion Of Control_Moose_Bread Board - Fatal编程技术网

Perl 线路板服务B依赖于服务A对象上的访问器

Perl 线路板服务B依赖于服务A对象上的访问器,perl,inversion-of-control,moose,bread-board,Perl,Inversion Of Control,Moose,Bread Board,使用我有一个对象/服务A和访问器$A->foo。对象/服务B的contstructor依赖于$A->Foo。我该怎么做?这是我所拥有的一个例子 use Moose; use Bread::Board; has info => ( is => 'ro', lazy => 1, isa => 'Str', default => sub { 'something' } ); extends 'Bread::Board::Container'; sub BUILD {

使用我有一个对象/服务
A
和访问器
$A->foo
。对象/服务B的contstructor依赖于
$A->Foo
。我该怎么做?这是我所拥有的一个例子

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
    };   
}

我不确定我可以添加或应该添加什么代码来实现这一点。

到目前为止,我发现最好的方法是使用block为该访问者添加另一个服务

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