package MyApp; use MyFramework; has dsn => (is => 'ro', isa => 'Str', default => 'dbi:mysql:myapp_db'); has tt_root => (is => 'ro', isa => 'Str', default => 'root/template'); has logger => (is => 'ro', isa => 'Logger', default => sub {Logger->new}); has model => ( is => 'ro', isa => 'Model', lazy => 1, default => sub { my $m = Model->connect($_[0]->dsn); $m->set_logger($_[0]->logger); return $m; }, ); has view => ( is => 'ro', isa => 'View', lazy => 1, default => sub { View->new(logger => $_[0]->logger, tt_root => $_[0]->tt_root); }, ); sub call { ... }