Ember uses a Dependency Injection (DI) pattern to manage the instantiation and relationship between classes. The system is split into two primary roles:
- Application: Acts as the registry for dependency declarations. Factories (classes) and injection rules are registered here.
- ApplicationInstance: Acts as the 'owner' of instantiated objects. It is used to 'look up' (instantiate or retrieve) objects from the registry.
While Services are the primary way to share state via DI, the underlying system allows for custom factory registrations and manual injections.