Almost every use of singleton I have encountered was best replaced by an attribute accessor in a higher level object that is then either
- explicitly passed around via a parameter, or
- used via a dynamically bound variable (possibly within a thread-safe wrapper)