Try our conversational search powered by Generative AI!

Loading...
Area: Optimizely CMS
ARCHIVED This content is retired and no longer maintained. See the latest version here.

Recommended reading 

The service locator ensures that the system can be built-in a modular manner by registering dependencies shared in a loosely coupled fashion, and lets you control exposure of globally without creating many global objects; instead, a single global container object holds these dependencies.

  • The epi.dependency implementation is a lightweight service locator implementation to facilitate a decoupled client-side architecture. 
  • The epi/dependency object is a service location container that is responsible for managing the registering and resolving of dependencies. It is the hub all classes use to get references to dependent class implementations. Instead of using specific implementations in a class, use epi.dependency to look up the implementation. This works just like a dictionary, where the key is a string and the value is an object.

Server locator lets you change the dependency at runtime or to perform unit testing, so you can register the new dependency with the same key. You do not need to change (or even know what) objects are using that dependency.

Registering dependencies

You can register dependencies by using an object instance.

JavaScript
var myServiceClass = new acme.services.MyServiceClass();
dependency.register("MyServiceClass", myServiceClass);

You also can register a "lazy" dependency where the class implementation is created when first resolved. The registered class is required and loaded by Dojo if needed.

JavaScript
dependency.register("MyLazyServiceClass", "acme.services.MyLazyServiceClass");

Resolving dependencies

When it comes to resolving dependencies, you need to know the key with which it is registered, then call resolve.

JavaScript
var service = dependency.resolve("MyServiceClass");

An error occurs if you try to resolve a key that is not registered. Also, because JavaScript does not have strongly typed objects, assume that the service locator will return an object with the interface you expect. If you override a registered dependency, you should ensure that the new object has the same interface as the previous one.

Do you find this information helpful? Please log in to provide feedback.

Last updated: Sep 21, 2015

Recommended reading