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

そのため、barのインスタンスの作成中にservicefooが異なる方法で初期化されます。

4

1 に答える 1

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' });
于 2012-03-30T06:23:02.367 に答える