It would work OK if there’s no other way of moving data across. The method you mention is described here:
In this very case as a way to push data into the Level Blueprint as it’s notoriously annoying to do so. But yes, you could treat the GI as a dispatcher manager. It would receive calls and propagate data to whoever else needs it.
This way you get a less tight actor coupling - those actors really do not need to know about each other’s existence. They just talk / listen to the Game Instance… from anywhere.
On the other hand, I’ve yet to run into a non-Level Blueprint scenario that would render such undertaking unavoidable. But depending on the mechanics and how / when actors come into play, it may be necessary / more logical to do so, ofc.
This will become a wiring nightmare at some point so do note that this exists:
…and can be used inside a function. Besides that, it’s somewhat uncommon knowledge but Event Dispatchers can also bind directly to functions.