2012-03-29 14 views
0

多くのテストで同じオブジェクトをインスタンス化していることがわかりましたので、この定数設定をBread::Boardで置き換えようとしています。ほとんどの場合、依存関係に同じ設定が必要です。しかし時々、デフォルトではないパラメータでインスタンスを作成したいことがあります。また、コンテナのインスタンスを作成した後でこれを変更することもできます。例えば私は通常、Bread :: Boardのデフォルト/置き換え可能な値

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

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

をしたいが、時々私が本当に必要なのはバーのインスタンスを作成しながらので、サービスfooが異なって初期化され

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

のようなものであると思います。

答えて

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' }); 
関連する問題