b6658b28435ac127b773692faff2b59a8be556ca
[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     $self->get_sub_container('component')->add_service(
12         Catalyst::IOC::ConstructorInjection->new(
13             name         => 'model_Bar',
14             class        => 'TestAppCustomContainer::Model::Bar',
15             dependencies => [
16                 depends_on( '/application_name' ),
17                 depends_on( '/config' ),
18                 depends_on( '/model/Foo' ),
19             ],
20         )
21     );
22     $self->get_sub_container('model')->add_service(
23         Catalyst::IOC::BlockInjection->new(
24             name         => 'Bar',
25             dependencies => [
26                 depends_on( '/model/Foo' ),
27                 depends_on( '/component/model_Bar' ),
28             ],
29             block => sub {
30                 my $s   = shift;
31
32                 my $foo = $s->param('Foo');
33                 $foo->inc_bar_got_it;
34
35                 return $s->param('model_Bar');
36             },
37         )
38     );
39
40     $self->get_sub_container('component')->add_service(
41         Catalyst::IOC::ConstructorInjection->new(
42             name         => 'model_Baz',
43             class        => 'TestAppCustomContainer::Model::Baz',
44             lifecycle    => '+Catalyst::IOC::LifeCycle::Request',
45             dependencies => [
46                 depends_on( '/application_name' ),
47                 depends_on( '/config' ),
48                 depends_on( '/model/Foo' ),
49             ],
50         )
51     );
52     $self->get_sub_container('model')->add_service(
53         Catalyst::IOC::BlockInjection->new(
54             name         => 'Baz',
55             dependencies => [
56                 depends_on( '/model/Foo' ),
57                 depends_on( '/component/model_Baz' ),
58             ],
59             block => sub {
60                 my $s   = shift;
61
62                 my $foo = $s->param('Foo');
63                 $foo->inc_baz_got_it;
64
65                 return $s->param('model_Baz');
66             },
67         )
68     );
69
70     $self->get_sub_container('model')->add_service(
71         Catalyst::IOC::BlockInjection->new(
72             name         => 'Quux',
73             lifecycle    => 'Singleton',
74             dependencies => [
75                 depends_on( '/component/model_Quux' ),
76             ],
77             block => sub { shift->param('model_Bar') },
78         )
79     );
80
81     $self->get_sub_container('component')->add_service(
82         Catalyst::IOC::ConstructorInjection->new(
83             name         => 'model_Fnar',
84             lifecycle    => 'Singleton',
85             class        => 'TestAppCustomContainer::External::Class',
86             dependencies => [
87                 depends_on( '/application_name' ),
88                 depends_on( '/config' ),
89             ],
90         )
91     );
92     $self->get_sub_container('model')->add_service(
93         Catalyst::IOC::BlockInjection->new(
94             name         => 'model_Fnar',
95             lifecycle    => 'Singleton',
96             dependencies => [
97                 depends_on( '/config' ),
98                 depends_on( '/component/model_Fnar' ),
99             ],
100             block => sub { shift->param('model_Fnar') },
101         )
102     );
103 }
104
105 __PACKAGE__->meta->make_immutable;
106
107 1;