The Service Locator Pattern in Swift
Avoid Dependency Injection entirely!
The service locator pattern is designed to encapsulate the processes invovled in obtaining a service with a strong layer of abstraction.
- You will be expected to be aware how to make a Single View Application, or a Playground to run Swift code
- This article avoids Dependency Injection, but you should be aware of what that is
- This article refers to the Singleton pattern
Service locator has a central registry known as the service locator, that on request returns the data required to perform a task. The service locator returns instances of services when they are requested by the service consumers or service clients.
The Service Locator pattern does not describe how to instantiate serveices, rather it describes a way to register services and locate them.
Here is an example. This example is written with a Playground in mind: In fact the tests are included (and will work ina Playground).
What is happening here is that we are using a Dictionary to register services. These services can be added or removed from the list, and basically lets us “get” the services from this dictionary.
Advantages and Disadvantages
— Application optimize themselves by adding or removing items from the ServiceLocator
— The only link between parts of the application becomes the registry of services
— The registry itself can be difficult to maintain
— When dependencies are missing there may be run-time errors
In fact it is common to set up the service locator itself as a Singleton, and then mocks can be inserted into the Service Locator (for example) with a code snippet:
This does, however
- Introduce a Singleton to your code
- it isn’t clear is the client of a server is using the Mock instance or real instance — so your testing is not repeatable
Service Locator is often considered to be an “Anti-Pattern”, as are “Singletons”. If you want to go in this direction you need to make sure that you understand what they are, and how they might impact your code.
I hope this article has gone some way in helping you decide this for yourself.
If you’ve any questions, comments or suggestions please hit me up on Twitter