2012-03-28 78 views
1

使用Bread::Board我有一個對象/服務A與訪問者$A->foo。對象/服務B取決於$A->Foo它的配置文件。我將如何做到這一點?這裏是我的一個例子麪包::板服務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有一個訪問富