First of all: DTSTTCPW. You probably shouldn't be using services at all. If you can send around individual objects, you should generally do that. I recommend you read my description of why services exist, on Stack Overflow.
Otherwise, if you specifically want to use services for your architecture:
The architecturally correct thing to do would be to take an IServiceProvider
object as an argument (to which you you could pass Game.Services
) for any object/method that needs to consume services. This is what ContentManager
does.
For an object/method needs to add services, you should pass around Game
(this is what XNA's GraphicsDeviceManager
's constructor takes, so it can add the IGraphicsDeviceService
) or GameServiceContainer
(which is what Game.Services
is).
(It should be noted that the whole Game
assembly is optional in XNA - there is no way to make an object that can add services without introducing a dependency on that assembly. IServiceProvider
is part of the .NET framework - but it cannot be used to add services.)
It is "bad" architecture to make these things global. But you can do it for expediency - as long as you understand (and comment appropriately) why you are doing so. Just be mindful that you may need to "undo" this deliberately-bad architecture in the future.
(There are many reasons globals are bad architecture. Here is just one good reference.)