2012-03-29 93 views
0

我發現自己在衆多測試中實例化相同的對象,所以我試圖用Bread::Board替換這個常量設置。大多數時候我會希望依賴關係具有相同的配置。但偶爾我可能想要使用非默認參數創建實例。我也希望能夠在創建容器實例後對其進行更改。例如我通常要麪包::板的默認/可替換值

my $c = Test::Container->new; 

my $bar = $c->resolve(service => 'bar'); # where bar depends on foo 

,但有時我真正需要的是一樣的東西

my $bar = $c->resolve(service => 'bar', { 
       services => { 
       foo => { init => 'arg' } 
       } 
      } 

所以在創建欄的實例服務foo的初始化不同。

回答

0

這是通過#moose Jesse Luehrs (Doy)提供給我的,似乎它會做我想做的。

#!/usr/bin/env perl 
use v5.14; 
use strict; 
use warnings; 

package Container { 
use Moose; 
use Bread::Board; 

extends 'Bread::Board::Container'; 

has '+name' => (default => 'Container'); 

sub BUILD { 
    my $self = shift; 
    container $self => as { 
     service foo => (
      block => sub { 
       my $s = shift; 
       $s->param('foo_val'); 
      }, 
      parameters => { 
       foo_val => { isa => 'Str' }, 
      }, 
     ); 
     service bar => (
      block => sub { 
       my $s = shift; 
       $s->param('foo')->inflate(foo_val => $s->param('foo_val')) . 'BAR'; 
      }, 
      dependencies => ['foo'], 
      parameters => { 
       foo_val => { isa => 'Str', default => 'FOO' }, 
      }, 
     ); 
    }; 
} 
} 

my $c = Container->new; 
warn $c->resolve(service => 'bar'); 
warn $c->resolve(service => 'bar', parameters => { foo_val => 'baz' });