Bread::Board::Declare

package MyApp::Container;
use Moose;
use Bread::Board::Declare;

has dsn    => (is => 'ro', isa => 'Str', value => 'dbi:mysql:myapp_db');
has logger => (is => 'ro', isa => 'Logger');
has view   => (is => 'ro', isa => 'View', infer => 1);

has model => (
    is           => 'ro',
    isa          => 'Model',
    infer        => 1,
    dependencies => ['dsn'],
    block        => sub {
        my $m = Model->connect($_[0]->param('dsn'));
        $m->set_logger($_[0]->param('logger'));
        return $m;
    },
);
has app => (is => 'ro', isa => 'MyApp', infer => 1);