How to decouple character from its components?

Lyra game sample character explicitly calls it’s components

void ALyraCharacter::OnXYZ {PawnExtComponent->OnXYZ}

This makes PawnExtComponent mandatory on each LyraCharacter.

I want to avoid this on my character.
Is there a way to notify all components about AMyChar::OnXYZ happening without explicitly calling them?

Delegates work, but they are messy

  1. I will have to declare delegate for each function in character (and that’s a lot of code repetition)
  2. Components will need the character header to bind to delegate (feels wrong)