使用Moose
和Bread::Board
,是有可能创建与具有ArrayRef[SomeObject]
类型约束的属性的对象,并且具有参数以这样的方式即注射:Bread :: Board - 使用ArrayRef类型约束注入参数?
- 的
ArrayRef
约束被维持, - 每个作为该ArrayRef成员的对象的所有依赖项满足
Bread::Board
和 - 作为该ArrayRef成员的每个对象都是由
Bread::Board
创建的对象?
为了确保我清楚地解释自己,让我们考虑一个令人难以置信的天真的例子。比方说,我们有一个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');
任何想法?是的,我知道我的Vehicle
可以想象没有车轮,我试图创造一个单轮轿车,但我认为你明白我的观点。 :-)这只是一个令人难以置信的微不足道的例子。
这是老了,我不想输入较长的答案,但[我的博客文章上使用提供商(HTTP:/ /www.xenoterracide.com/2013/10/providing-with-providers-and-breadboard.html)可能会帮助人们解决像这样的问题 – xenoterracide 2013-11-01 06:57:16