some todos
[catagits/Catalyst-Runtime.git] / lib / Catalyst / IOC / Container.pm
index 3ad90a2..b89fd96 100644 (file)
@@ -681,8 +681,11 @@ sub _find_component_regexp {
 # user overrides the container (which is what we want), the sub-container they
 # will use is precisely $type, not 'component'. So for now, I'm returning both
 # services, to decide later what to do.
+# TODO
+# add pod, remove code repetition
 sub get_all_component_services {
-    my ($self, $class) = @_;
+    my $self = shift;
+
     my %components;
     my $components_container = $self->get_sub_container('component');
 
@@ -710,16 +713,42 @@ sub get_all_component_services {
     return lock_hash %components;
 }
 
+# TODO
+# add pod, remove code repetition
+sub get_all_singleton_lifecycle_components {
+    my $self = shift;
+
+    my %components;
+    my $components_container = $self->get_sub_container('component');
+
+    foreach my $type (qw/model view controller /) {
+        my $container = $self->get_sub_container($type);
+
+        for my $component ($container->get_service_list) {
+            my $comp_service = $container->get_service($component);
+
+            my $key       = $comp_service->catalyst_component_name;
+            my $lifecycle = $comp_service->lifecycle;
+            my $comp_name = "${type}_${component}";
+
+            if (defined $lifecycle && $lifecycle eq 'Singleton') {
+                $components{$key} = $comp_service->get;
+            }
+            elsif ($components_container->has_service($comp_name)) {
+                $components{$key} = $components_container->get_service($comp_name)->get;
+            }
+        }
+    }
+
+    return lock_hash %components;
+}
+
+# TODO
+# remove code repetition
 sub get_all_components {
     my ($self, $class) = @_;
     my %components;
 
-    # FIXME - if we're getting from these containers, we need to either:
-    #   - pass 'ctx' and 'accept_context_args' OR
-    #   - make these params optional
-    # big problem when setting up the dispatcher - this method is called
-    # as $container->get_all_components('MyApp'). What to do with Request
-    # life cycles?
     foreach my $type (qw/model view controller /) {
         my $container = $self->get_sub_container($type);