There are a number of ways to expose information to the reader: dialog, letters, news reports, and flashbacks are just a few. But by far the best way to expose information to the reader is to have someone close to the hero who doesn’t understand what is going on. I call this “the idiot in the room.”
When you want to let the reader know a fact that may not be intuitively obvious, you can have some uninitiated character ask obvious questions. Think about the classic example of Dr. Watson and Sherlock Holmes. Watson was constantly asking questions that allowed Holmes to explain how he knew what was going on.
This can also work in reverse – by having the hero be the idiot in the room. One great example of this is the old TV series “Columbo.” Columbo would constantly ask questions of the suspect requiring them to explain himself. And his classic maneuver was to ask “Oh, just one more thing…” This was always his moment to skewer the villain with the crime.
I recently watched a rerun of “Lie to Me.” The main character, Dr. Lightman, is played by Tim Roth. He is a PhD. whose secret power is that he can read micro-expressions and tell when people are lying. He has a sidekick named Torres who is just learning the craft. Whenever Lightman figures out who is lying, Torres asks how he knows. He then launches into a description of the facial ticks or body language that exposes the liar.
If you need to explain something to the reader, a great way to do it is to create a sidekick who needs mentoring from the hero. Or, make the hero a character who needs information from a more experienced character (like a reporter asking questions of a professor). The idiot in the room is your secret weapon to exposition that is natural and not information dumping.