use strict;
use warnings;
use Bread::Board;
-
-# FIXME - neither of these work:
-#use Sub::Exporter -setup => [
-# qw(
-# as
-# container
-# depends_on
-# service
-# alias
-# wire_names
-# include
-# typemap
-# infer
-# )
-#];
+use Catalyst::IOC::ConstructorInjection;
+
+# FIXME - All of these imports need to get the importing package
+# as the customise_container and current_container variables
+# NEED to be in the containers package so there can be multiple
+# containers..
+use Sub::Exporter -setup => {
+ exports => [qw/
+ component
+ model
+ container
+ /],
+ groups => { default => [qw/
+ component
+ model
+ container
+ /]},
+};
#use Sub::Exporter -setup => [
# qw(
# Bread::Board::as
#];
# I'm probably doing it wrong.
# Anyway, I'll just use Moose::Exporter. Do I really have to use Sub::Exporter?
-use Moose::Exporter;
-Moose::Exporter->setup_import_methods(
- also => ['Bread::Board'],
-);
+#use Moose::Exporter;
+#Moose::Exporter->setup_import_methods(
+# also => ['Bread::Board'],
+#);
+our $customise_container;
+our $current_container;
+
+sub container (&) {
+ my $code = shift;
+ $customise_container = sub {
+ warn("In customise container");
+ local $current_container = shift();
+ $code->();
+ };
+}
+
+sub model (&) {
+ my $code = shift;
+ local $current_container = $current_container->get_sub_container('model');
+ $code->();
+}
+
+sub component {
+ my ($name, %args) = @_;
+ $args{dependencies} ||= {};
+ $args{dependencies}{application_name} = depends_on( '/application_name' );
+
+ # FIXME - check $args{type} here!
+
+ my $service = Catalyst::IOC::ConstructorInjection->new(
+ %args,
+ name => $name,
+ lifecycle => 'Singleton',
+ # XX FIXME - needs to become possible to intuit catalyst_component_name
+ # from dependencies (like config)
+ catalyst_component_name => 'TestAppCustomContainer::Model::Bar',
+ );
+ $current_container->add_service($service);
+}
1;