2012-03-28 7 views
1

を使用するBread::Board私はオブジェクト/サービスAにアクセサ$A->fooを持っています。オブジェクト/サービスBはコンストラクタのため$A->Fooに依存します。どうすればいい?ここで私は、私が追加することができたり、この作業をするために持っている必要がありどのようなコードを確認していない私はBread :: BoardサービスBはアクセサのサービスオブジェクトに依存します

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

を持っているものの例です。

答えて

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の

を持っていることを前提としてい
関連する問題