diff options
-rw-r--r-- | lib/Bread/Board/Declare/Meta/Role/Attribute/Container.pm | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/lib/Bread/Board/Declare/Meta/Role/Attribute/Container.pm b/lib/Bread/Board/Declare/Meta/Role/Attribute/Container.pm index 6fa68ad..1b5ab6d 100644 --- a/lib/Bread/Board/Declare/Meta/Role/Attribute/Container.pm +++ b/lib/Bread/Board/Declare/Meta/Role/Attribute/Container.pm @@ -1,9 +1,48 @@ package Bread::Board::Declare::Meta::Role::Attribute::Container; use Moose::Role; Moose::Util::meta_attribute_alias('Container'); +# ABSTRACT: attribute metarole for container attributes in Bread::Board::Declare use Class::Load 'load_class'; +=head1 DESCRIPTION + +This attribute trait indicates that the attribute (in a +L<Bread::Board::Declare> class) contains a subcontainer rather than a service. +It must be specified explicitly (or else a service that happens to return a +container will be created): + + has attr => ( + traits => ['Container'], + is => 'ro', + isa => 'Bread::Board::Container', + ); + +Container attributes (unlike service attributes) can have defaults and +builders, allowing you to also define subcontainers inline when desired, as in: + + has attr => ( + traits => ['Container'], + is => 'ro', + isa => 'Bread::Board::Container', + default => sub { + container Foo => as { + service Bar => 'BAR'; + }; + } + ); + +=cut + +=attr dependencies + +If no default or builder is supplied, the type constraint will be used to +create a container instance automatically (using a temporary +L<ConstructorInjection|Bread::Board::ConstructorInjection> service). This is +the dependency specification to use for that temporary service. + +=cut + has dependencies => ( is => 'ro', isa => 'Bread::Board::Service::Dependencies', |