The best example to consider here is testing. When you write your tests for MyApp::Model::Users do you want to have to have $c as it exists in Mojolicious (or a complex mock of it) or would you prefer to just have to give it what it needs to work?
$app = Mock::App->new(db => $db, config => Mock::Config->new({}));
my $users = MyApp::Model::Users->new(app => $app);
..blah blah..
or rather
$users = MyApp::Model::Users( db => $db, partner_id => 4321, other_config => 'options' );
If you have more models, then you do something like..
$model = MyApp::Model->new(db => $db, other_config => 'options');
$users = $model->users( partner_id => 4321 );
or
$model = MyApp::Model->new(db => $db, partner_id => 4321, other_config => 'options' );
$users = $model->users();
The main point though is to keep your package separate from Mojolicious (or any other module/framework) to keep it simple, testable, and portable.