1#!/usr/bin/perl 2 3use strict; 4use warnings; 5 6use Test::More; 7use Test::Fatal; 8 9use Bread::Board; 10 11{ 12 package My::Database::Handle; 13 use Moose; 14 15 has ['dsn', 'username', 'password'] => ( is => 'ro', isa => 'Str', required => 1 ); 16} 17 18my $utils = container 'Utils' => as { 19 container 'Database' => [ 'DBConnInfo' ] => as { 20 service 'handle' => ( 21 class => 'My::Database::Handle', 22 dependencies => { 23 dsn => depends_on('DBConnInfo/dsn'), 24 username => depends_on('DBConnInfo/username'), 25 password => depends_on('DBConnInfo/password'), 26 } 27 ); 28 }; 29}; 30isa_ok($utils, 'Bread::Board::Container'); 31 32my $db_conn_info = container 'DatabaseConnection' => as { 33 service 'dsn' => 'dbi:mysql:foo'; 34 service 'username' => 'bar'; 35 service 'password' => '***'; 36}; 37isa_ok($db_conn_info, 'Bread::Board::Container'); 38 39my $db = $utils->fetch('Database'); 40isa_ok($db, 'Bread::Board::Container::Parameterized'); 41 42isnt(exception { 43 $utils->fetch('Database')->fetch('handle'); 44}, undef, '... cannot fetch on a parameterized container'); 45 46isnt(exception { 47 $utils->fetch('Database/handle'); 48}, undef, '... cannot fetch within a parameterized container'); 49 50my $dbh = $db->create( DBConnInfo => $db_conn_info )->resolve( service => 'handle' ); 51isa_ok($dbh, 'My::Database::Handle'); 52 53done_testing; 54