Update : See this post for a sample project!
Last summer I worked with Microsoft patterns & practices‘ Guidance Automation Toolkit, one of their software factories used for convenient Visual Studio 2005 extensibility. It imposed a strict but well-made service/component model not unlike XNA, but had some more stuff that I thought could become necessary in a big XNA game project; two of those being service dependencies and injection in components and services. So I went ahead an implemented them in an XNA context.
The principle is an extension to the current service/component model of XNA :
- Components should be “pluggable” and react properly when removed from or appended to a project;
- The only communication points between a component and its environment are the services it obtains from the game context.
This already works in a typical XNA project. My problem was that if a component needs a service to behave properly, it has no direct means of telling the game, so if the game can’t provide it, the component will throw a NullReferenceException when using the null service that the service collection returned.