sub setup_config {
my $class = shift;
- my %args = %{ $class->config || {} };
+ my $args = $class->config || {};
my @container_classes = ( "${class}::Container", 'Catalyst::IOC::Container');
- unshift @container_classes, delete $args{container_class} if exists $args{container_class};
+ unshift @container_classes, delete $args->{container_class} if exists $args->{container_class};
my $container_class = Class::MOP::load_first_existing_class(@container_classes);
- my $container = $container_class->new( %args, application_name => "$class", name => "$class" );
+ my $container = $container_class->new( application_name => "$class", name => "$class" );
$class->container($container);
- my $config = $container->resolve(service => 'config');
+ my $config = $container->resolve( service => 'config' );
$class->config($config);
$class->finalize_config; # back-compat
}
local_files
global_config
local_config
+ class_config
config_local_suffix
config_path
locate_components
/;
+ my $config = $self->resolve( service => 'config' );
+
$self->add_sub_container(
$self->build_controller_subcontainer
);
- # FIXME - the config should be merged at this point
- my $config = $self->resolve( service => 'config' );
- my $default_view = $params->{default_view} || $config->{default_view};
- my $default_model = $params->{default_model} || $config->{default_model};
-
$self->add_sub_container(
$self->build_view_subcontainer(
- default_component => $default_view,
+ default_component => $config->{default_view},
)
);
$self->add_sub_container(
$self->build_model_subcontainer(
- default_component => $default_model,
+ default_component => $config->{default_model},
)
);
}
my @global = @{$s->param('global_config')};
my @locals = @{$s->param('local_config')};
- my $config = {};
+ my $config = $s->param('class_config');
+
for my $cfg (@global, @locals) {
for (keys %$cfg) {
$config = Catalyst::Utils::merge_hashes( $config, $cfg->{$_} );
}
}
+
return $config;
},
- dependencies => [ depends_on('global_config'), depends_on('local_config') ],
+ dependencies => [ depends_on('global_config'), depends_on('local_config'), depends_on('class_config') ],
);
}
);
}
+sub build_class_config_service {
+ my $self = shift;
+
+ return Bread::Board::BlockInjection->new(
+ lifecycle => 'Singleton',
+ name => 'class_config',
+ block => sub {
+ my $s = shift;
+ my $app = $s->param('application_name');
+
+ # Container might be called outside Catalyst context
+ return {} unless Class::MOP::is_class_loaded($app);
+
+ # config might not have been defined
+ return $app->config || {};
+ },
+ dependencies => [ depends_on('application_name') ],
+ );
+}
+
sub build_global_config_service {
my $self = shift;