Parameterized Containers
file: code/ParameterizedContainer/MyBB.pm
1: package MyBB;
2: use 5.014;
3: use Bread::Board;
4:
5: sub setup {
6: my ( $class, $env_name ) = @_;
7:
8: my $env = $class->$env_name;
9:
10: my $apps = container 'CouchPotatoe' => ['Env'] => as {
11: service 'FindNewSeries' => (
12: class => 'FindNewSeries',
13: dependencies => {
14: ua => '/Env/UserAgent',
15: formatter => '/Component/Number-Format',
16: renderer => '/Env/Renderer',
17: }
18: );
19: container 'Component' => as {
20: service 'LWP-UserAgent' => (
21: class => 'LWP::UserAgent',
22: lifecycle => 'Singleton',
23: );
24: service 'Number-Format' => (
25: class => 'Number::Format',
26: lifecycle => 'Singleton',
27: );
28: service 'TT' => (
29: class => 'Template',
30: lifecycle => 'Singleton',
31: block => sub {
32: return Template->new(
33: INCLUDE_PATH => $FindBin::Bin . '/../tt/' );
34: },
35: );
36: service 'MockUA' => (
37: class => 'MockUA',
38: lifecycle => 'Singleton',
39: );
40: service 'MockTT' => (
41: class => 'MockTT',
42: lifecycle => 'Singleton',
43: );
44: };
45: };
46:
47: return $apps->create( 'Env' => $env );
48: }
49:
50: sub dev {
51: my ($class) = @_;
52: return container 'Dev' => as {
53: alias 'UserAgent' => '/Component/MockUA';
54: alias 'Renderer' => '/Component/MockTT';
55: };
56: }
57:
58: sub prod {
59: my ($class) = @_;
60: return container 'Prod' => as {
61: alias 'UserAgent' => '/Component/LWP-UserAgent';
62: alias 'Renderer' => '/Component/TT';
63: };
64: }
65:
66: 1;