X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FIOC%2FContainer.pm;h=0672c83094d66482abc176d779540a5eafd3f84e;hb=d0f954b4d716e3c196a68b5674d11243863dec39;hp=9b8243c72609278c6d54e704a6b77d9105526a47;hpb=b4410fc3f955f6e794af4ce6d72df8b443816beb;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/IOC/Container.pm b/lib/Catalyst/IOC/Container.pm index 9b8243c..0672c83 100644 --- a/lib/Catalyst/IOC/Container.pm +++ b/lib/Catalyst/IOC/Container.pm @@ -432,9 +432,14 @@ sub get_component_from_sub_container { } sub find_component { - my ( $self, $component, @args ) = @_; + my ( $self, $component, $c, @args ) = @_; + my ( $type, $name ) = Catalyst::_get_component_type_name($component); my @result; + return $self->get_component_from_sub_container( + $type, $name, $c, @args + ) if $type; + my $query = ref $component ? $component : qr{^$component$} @@ -445,10 +450,15 @@ sub find_component { my @components = $subcontainer->get_service_list; @result = grep { m{$component} } @components; - return map { $subcontainer->get_component( $_, @args ) } @result + return map { $subcontainer->get_component( $_, $c, @args ) } @result if @result; } + # one last search for things like $c->comp(qr/::M::/) + @result = $self->find_component_regexp( + $c->components, $component, $c, @args + ) if !@result and ref $component; + # it expects an empty list on failed searches return @result; }