Summary
Congratulations on making it to the end of the last hands-on chapter! We’ve been through a lot, from creating service contract interfaces and a simple static service locator class, all the way to a flexible and extendable generic implementation with null service and null object protection (because it’s always good to have insurance).
Remember, the Service Locator pattern is best used in situations where you have systems or services that are unique (they only need one instance in the project) and context-free (they don’t depend on a situation or section of the game to run). You can build them manually if you know what services you want ahead of time, or you can spin up a generic solution to dynamically register and query your services while your program is running. When it comes to service scope, you have a few paths open to you, but your choice will depend on what you’re trying to accomplish with your project.
Keep in mind that service...