package MyApp; use MyFramework; has logger => ( is => 'ro', isa => 'Logger', default => sub { Logger->new } ); has model => ( is => 'ro', isa => 'Model', lazy => 1, default => sub { Model->new(logger => $_[0]->logger) }, ); has view => ( is => 'ro', isa => 'View', lazy => 1, default => sub { View->new(logger => $_[0]->logger) }, ); sub call { my $self = shift; my $hello = $self->model->get_hello; return $self->view->render($hello); }