1

Bread::Boardの使用Awith accessor を持つオブジェクト/サービスがあります$A->foo。オブジェクト/サービス B は、そのコンストラクターに依存し$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
    };   
}

これを機能させるためにどのコードを追加できるか、またはどのコードを追加する必要があるかわかりません。

4

1 に答える 1

0

私がこれまでに見つけた最善の方法は、そのアクセサーだけにブロックを使用して別のサービスを追加することです

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 があることを前提としています

于 2012-03-29T19:57:45.253 に答える