面包::板的默认/可替换值
问题描述:
我发现自己在众多测试中实例化相同的对象,所以我试图用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的初始化不同。
答
这是通过#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' });