IgnitionGateway is the ‘implementation’ class of GatewayContext. It’s a singleton purely for coding convenience - by definition, if you’re running code on the gateway scope, an instance of the gateway is available.
However, methods that are defined on IgnitionGateway but notGatewayContext are considered implementation details and should not be used or relied upon. Code against the interface, not the implementation, as the saying goes.
You don’t implement (or even care about) IgnitionGateway. In your module’s GatewayHook, the setup method will be invoked with a GatewayContext. If you need to reuse the gateway context elsewhere in your module, store it in a field and give your other classes access to your hook class.