Actually, they’re typically registered inGameInitializationEvent, not by it. Unless you’re explicitly Order.LATE, you should be checking during GamePostInitializationEvent.
It may have worked in the particular economy implementation you tested against, but again, I urge you to use GamePostInitializationEvent instead as that’s when every implementation is done by.
Also, I just read your code. Do not store the service like that because a service provider can change while the server is running. Instead, fetch the service each time, or alternatively keep it in a variable but update the variable on ChangeServiceProviderEvent.