}
sub find_component {
- my ( $self, $component, $c, @args ) = @_;
+ my ( $self, $component, @args ) = @_;
my ( $type, $name ) = _get_component_type_name($component);
my @result;
return $self->get_component_from_sub_container(
- $type, $name, $c, @args
+ $type, $name, @args
) if $type;
my $query = ref $component
my @components = $subcontainer->get_service_list;
@result = grep { m{$component} } @components;
- return map { $subcontainer->get_component( $_, $c, @args ) } @result
+ return map { $subcontainer->get_component( $_, @args ) } @result
if @result;
}
- # FIXME - I guess I shouldn't be calling $c->components here
# one last search for things like $c->comp(qr/::M::/)
@result = $self->find_component_regexp(
- $c->components, $component, $c, @args
+ $component, @args
) if !@result and ref $component;
# it expects an empty list on failed searches
}
sub find_component_regexp {
- my ( $self, $components, $component, @args ) = @_;
+ my ( $self, $component, @args ) = @_;
my @result;
- my @components = grep { m{$component} } keys %{ $components };
+ my @components = grep { m{$component} } keys %{ $self->get_all_components };
for (@components) {
my ($type, $name) = _get_component_type_name($_);
my $self = shift;
my %components;
- my $containers = {
- map { $_ => $self->get_sub_container($_) } qw(model view controller)
- };
+ my $container = $self->get_sub_container('component');
- for my $container (keys %$containers) {
- for my $component ($containers->{$container}->get_service_list) {
- my $comp = $containers->{$container}->resolve(
- service => $component
- );
- my $comp_name = ref $comp || $comp;
- $components{$comp_name} = $comp;
- }
+ for my $component ($container->get_service_list) {
+ my $comp = $container->resolve(
+ service => $component
+ );
+ my $comp_name = ref $comp || $comp;
+ $components{$comp_name} = $comp;
}
return lock_hash %components;
depends_on( '/application_name' ),
depends_on( '/config' ),
],
- parameters => {
- suffix => {
- isa => 'Str',
- default => Catalyst::Utils::class2classsuffix( $component ),
- },
- },
)
);
dependencies => [
depends_on( "/component/$component_service_name" ),
],
- parameters => {
- accept_context_args => {
- isa => 'ArrayRef|Undef',
- required => 0,
- default => undef,
- },
- },
block => sub { return shift->param($component_service_name) },
)
);
=head1 Building Containers
+=head2 build_component_subcontainer
+
+Container that stores all components, i.e. all models, views and controllers
+together. Each service is an instance of the actual component, and by default
+it lives while the application is running. Retrieving components from this
+subcontainer will instantiate the component, if it hasn't been instantiated
+already, but will not execute ACCEPT_CONTEXT.
+
=head2 build_model_subcontainer
-Container that stores all models.
+Container that stores references for all models that are inside the components
+subcontainer. Retrieving a model triggers ACCEPT_CONTEXT, if it exists.
=head2 build_view_subcontainer
-Container that stores all views.
+Same as L<build_model_subcontainer>, but for views.
=head2 build_controller_subcontainer
-Container that stores all controllers.
+Same as L<build_model_subcontainer>, but for controllers. The difference is
+that there is no ACCEPT_CONTEXT for controllers.
=head1 Building Services