In an MVVM application I need to use some services that are persistent, e.g. network services like P2P and WCF where the main "engine" or server endpoint must remain up and running during the lifetime of my application. Currently I have coded these into singletons that abstracts functionality, using the engine or server instance internally.
Another example is a central message queue (like a main loop/BlockingCollection) where I need to queue various tasks that need to be processed sequentially.
How should I define and access such services in an MVVM context? I have read about the service locator pattern but this and singletons are often described as an anti-patterns?