use Hash::Util qw/lock_hash/;
use MooseX::Types::LoadableClass qw/ LoadableClass /;
use Moose::Util;
-use Catalyst::IOC::BlockInjection;
+use Catalyst::IOC::ConstructorInjection;
use Module::Pluggable::Object ();
use namespace::autoclean;
%$config
);
- # XXX think about ditching this sort entirely
- my @comps = sort { length $a <=> length $b } $locator->plugins;
-
- return \@comps;
+ return [ $locator->plugins ];
},
dependencies => [ depends_on('application_name'), depends_on('config') ],
);
return unless $type;
$self->get_sub_container($type)->add_service(
- Catalyst::IOC::BlockInjection->new(
- lifecycle => 'Singleton', # FIXME?
+ Catalyst::IOC::ConstructorInjection->new(
name => $name,
- block => sub { $self->setup_component( $component, $class ) },
+ class => $component,
+ dependencies => [
+ depends_on( '/application_name' ),
+ depends_on( '/config' ),
+ ],
+ parameters => {
+ suffix => {
+ isa => 'Str',
+ default => Catalyst::Utils::class2classsuffix( $component ),
+ },
+ accept_context_args => {
+ isa => 'ArrayRef|Undef',
+ required => 0,
+ default => undef,
+ },
+ },
)
);
}
return (undef, $component);
}
-# FIXME ugly and temporary
-# Just moved it here the way it was, so we can work on it here in the container
-sub setup_component {
- my ( $self, $component, $class ) = @_;
-
- unless ( $component->can( 'COMPONENT' ) ) {
- return $component;
- }
-
- # FIXME I know this isn't the "Dependency Injection" way of doing things,
- # its just temporary
- my $suffix = Catalyst::Utils::class2classsuffix( $component );
- my $config = $self->resolve(service => 'config')->{ $suffix } || {};
-
- # Stash catalyst_component_name in the config here, so that custom COMPONENT
- # methods also pass it. local to avoid pointlessly shitting in config
- # for the debug screen, as $component is already the key name.
- local $config->{catalyst_component_name} = $component;
-
- my $instance = eval { $component->COMPONENT( $class, $config ); };
-
- if ( my $error = $@ ) {
- chomp $error;
- Catalyst::Exception->throw(
- message => qq/Couldn't instantiate component "$component", "$error"/
- );
- }
- elsif (!blessed $instance) {
- my $metaclass = Moose::Util::find_meta($component);
- my $method_meta = $metaclass->find_method_by_name('COMPONENT');
- my $component_method_from = $method_meta->associated_metaclass->name;
- my $value = defined($instance) ? $instance : 'undef';
- Catalyst::Exception->throw(
- message =>
- qq/Couldn't instantiate component "$component", COMPONENT() method (from $component_method_from) didn't return an object-like value (value was $value)./
- );
- }
-
- return $instance;
-}
-
sub expand_component_module {
my ( $class, $module ) = @_;
return Devel::InnerPackage::list_packages( $module );
Finds components that match a given regexp. Used internally, by find_component.
-=head2 setup_component
-
=head2 _fix_syntax
=head2 _config_substitutions
Specify a C<setup_components> config option to pass additional options directly
to L<Module::Pluggable>.
-=head2 build_setup_components_service
+=head2 setup_components
=head1 AUTHORS