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;
my $config = $self->resolve( service => 'config' );
$self->add_sub_container(
+ $self->build_component_subcontainer
+ );
+
+ $self->add_sub_container(
$self->build_controller_subcontainer
);
);
}
+sub build_component_subcontainer {
+ my $self = shift;
+
+ return Bread::Board::Container->new(
+ name => 'component',
+ );
+}
+
sub build_application_name_service {
my $self = shift;
return unless $type;
- $self->get_sub_container($type)->add_service(
+ my $component_service_name = "${type}_${name}";
+
+ $self->get_sub_container('component')->add_service(
Catalyst::IOC::ConstructorInjection->new(
- name => $name,
+ name => $component_service_name,
class => $component,
+ lifecycle => 'Singleton',
dependencies => [
depends_on( '/application_name' ),
depends_on( '/config' ),
isa => 'Str',
default => Catalyst::Utils::class2classsuffix( $component ),
},
+ },
+ )
+ );
+
+ $self->get_sub_container($type)->add_service(
+ Catalyst::IOC::BlockInjection->new(
+ name => $name,
+ 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) },
)
);
}