Baz -> RequestLifeCycle
[catagits/Catalyst-Runtime.git] / t / lib / TestAppCustomContainer / NoSugarContainer.pm
1 package TestAppCustomContainer::NoSugarContainer;
2 use Moose;
3 use namespace::autoclean;
4 use Catalyst::IOC;
5
6 extends 'Catalyst::IOC::Container';
7
8 sub BUILD {
9     my $self = shift;
10
11     warn("Add SingletonLifeCycle to model");
12     $self->get_sub_container('model')->add_service(
13         Catalyst::IOC::ConstructorInjection->new(
14             name             => 'SingletonLifeCycle',
15             lifecycle        => 'Singleton',
16             class            => 'TestAppCustomContainer::Model::SingletonLifeCycle',
17             catalyst_component_name => 'TestAppCustomContainer::Model::SingletonLifeCycle',
18             dependencies     => {
19                 application_name => depends_on( '/application_name' ),
20                 foo => depends_on('/model/DefaultSetup'),
21             },
22         )
23     );
24
25     $self->get_sub_container('model')->add_service(
26         # FIXME - i think it should be a ConstructorInjection
27         # but only BlockInjection gets ctx parameter
28         Catalyst::IOC::ConstructorInjection->new(
29             name         => 'RequestLifeCycle',
30             lifecycle    => '+Catalyst::IOC::LifeCycle::Request',
31             class        => 'TestAppCustomContainer::Model::RequestLifeCycle',
32             dependencies => {
33                 application_name => depends_on( '/application_name' ),
34                 foo => depends_on('/model/DefaultSetup'),
35             },
36         )
37     );
38
39 # Broken deps!?!
40 #    $self->get_sub_container('model')->add_service(
41 #        Catalyst::IOC::BlockInjection->new(
42 #            name         => 'Quux',
43 #            lifecycle    => 'Singleton',
44 #            dependencies => [
45 #                depends_on( '/component/model_Quux' ),
46 #            ],
47 #            block => sub { shift->param('model_Bar') },
48 #        )
49 #    );
50
51     my $fnar_config = $self->resolve(service => 'config')->{'Model::Fnar'} || {};
52     $self->get_sub_container('component')->add_service(
53         Catalyst::IOC::ConstructorInjection->new(
54             name         => 'model_Fnar',
55             lifecycle    => 'Singleton',
56             class        => 'TestAppCustomContainer::External::Class',
57             dependencies => [
58                 depends_on( '/application_name' ),
59             ],
60             config => $fnar_config,
61         )
62     );
63     $self->get_sub_container('model')->add_service(
64         Catalyst::IOC::BlockInjection->new(
65             name         => 'model_Fnar',
66             lifecycle    => 'Singleton',
67             dependencies => [
68                 depends_on( '/config' ),
69                 depends_on( '/component/model_Fnar' ),
70             ],
71             block => sub { shift->param('model_Fnar') },
72         )
73     );
74 }
75
76 __PACKAGE__->meta->make_immutable;
77
78 1;