Bread :: Board-注入具有ArrayRef类型约束的参数吗?

| 使用
Moose
Bread::Board
,可以创建一个对象,该对象的属性具有类型
ArrayRef[SomeObject]
约束,并且可以通过以下方式注入该参数: 维持
ArrayRef
约束, 属于ArrayRef成员的每个对象都具有
Bread::Board
满足的所有依赖关系,并且 属于ArrayRef成员的每个对象都是由“ 1”创建的对象。 为了确保我清楚地解释自己,让我们考虑一个令人难以置信的天真例子。假设我们有一个
Wheel
类:
package Wheel;
use Moose;

has [\'size\', \'maker\'] => (isa => \'Str\', is => \'rw\', required => 1);
让我们创建一个
Vehicle
类,其中每个实例包含一堆轮子:
package Vehicle;
use Moose;

has \'wheels\' => (
    is => \'rw\',
    isa => \'ArrayRef[Wheel]\',
    required => 1,
);
然后可以创建一个或多个
Wheel
实例,然后将包含这些实例的数组引用注入到我们的新
Vehicle
实例中吗?这显然行不通:
my $c = container \'app\' => as {
    container \'wheels\' => as {
        service \'maker\' => \"Bob\'s Tires\";
        service \'size\' => \"195R65/15\";
        service \'carTires\' => (
            class   => \'Wheel\',
            dependencies => [ depends_on(\'maker\'), depends_on(\'size\') ],
        )
    };

    container \'vehicles\' => as {
        service \'sedan\' => (
            class   => \'Vehicle\',
            dependencies => {
                # WON\'T WORK
                wheels => depends_on(\'/wheels/carTires\'),
            }
        )
    };
};
my $v = $c->resolve(service => \'vehicles/sedan\');
有任何想法吗?是的,我知道我的ѭ8可以没有轮子,并且我正在尝试制造单轮轿车,但我想您明白我的意思。 :-)这仅是一个非常简单的例子。     
已邀请:
        您可以获取carTires服务以返回Wheels的ArrayRef:
container \'wheels\' => as {
    service \'carTires\' => (
        block => sub {
            return [ map {Wheel->new} 1..4 ];
        },
    )
};
Vehicle构造函数将根据类型约束来处理其余部分,因为您已经将其定义为ArrayRef [Wheel]。 因此,如果您改为这样做,它将死:
container \'wheels\' => as {
    service \'carTires\' => (
        block => sub {
            return [ map {Window->new} 1..4 ];
        },
    )
};
    

要回复问题请先登录注册