RegistryProxyMixin Class packages/ember-runtime/lib/mixins/registry_proxy.js:9
PRIVATE
Defined in: packages/ember-runtime/lib/mixins/registry_proxy.js:9
Module: ember-runtime
RegistryProxyMixin is used to provide public access to specific registry functionality.
Methods
hasRegistration
(fullName)
Boolean
public
Check if a factory is registered.
Parameters:
- fullName String
Returns:
- Boolean
inject
(factoryNameOrType, property, injectionName)
public
Define a dependency injection onto a specific factory or all factories of a type.
When Ember instantiates a controller, view, or other framework component it can attach a dependency to that component. This is often used to provide services to a set of framework components.
An example of providing a session object to all controllers:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
var App = Ember.Application.create(); var Session = Ember.Object.extend({ isAuthenticated: false }); // A factory must be registered before it can be injected App.register('session:main', Session); // Inject 'session:main' onto all factories of the type 'controller' // with the name 'session' App.inject('controller', 'session', 'session:main'); App.IndexController = Ember.Controller.extend({ isLoggedIn: Ember.computed.alias('session.isAuthenticated') }); |
Injections can also be performed on specific factories.
1 2 3 |
App.inject(<full_name or type>, <property name>, <full_name>) App.inject('route', 'source', 'source:main') App.inject('route:application', 'email', 'model:email') |
It is important to note that injections can only be performed on
classes that are instantiated by Ember itself. Instantiating a class
directly (via create
or new
) bypasses the dependency injection
system.
Note: Ember-Data instantiates its models in a unique manner, and consequently
injections onto models (or all models) will not work as expected. Injections
on models can be enabled by setting Ember.MODEL_FACTORY_INJECTIONS
to true
.
register
(fullName, factory, options)
public
Registers a factory that can be used for dependency injection (with
inject
) or for service lookup. Each factory is registered with
a full name including two parts: type:name
.
A simple example:
1 2 3 4 |
var App = Ember.Application.create(); App.Orange = Ember.Object.extend(); App.register('fruit:favorite', App.Orange); |
Ember will resolve factories from the App
namespace automatically.
For example App.CarsController
will be discovered and returned if
an application requests controller:cars
.
An example of registering a controller with a non-standard name:
1 2 3 4 5 6 7 8 9 10 |
var App = Ember.Application.create(); var Session = Ember.Controller.extend(); App.register('controller:session', Session); // The Session controller can now be treated like a normal controller, // despite its non-standard name. App.ApplicationController = Ember.Controller.extend({ needs: ['session'] }); |
Registered factories are instantiated by having create
called on them. Additionally they are singletons, each time
they are looked up they return the same instance.
Some examples modifying that default behavior:
1 2 3 4 5 6 7 8 9 10 11 |
var App = Ember.Application.create(); App.Person = Ember.Object.extend(); App.Orange = Ember.Object.extend(); App.Email = Ember.Object.extend(); App.session = Ember.Object.create(); App.register('model:user', App.Person, { singleton: false }); App.register('fruit:favorite', App.Orange); App.register('communication:main', App.Email, { singleton: false }); App.register('session', App.session, { instantiate: false }); |
registerOption
(fullName, optionName, options)
public
Register an option for a particular factory.
registerOptions
(fullName, options)
public
Register options for a particular factory.
Parameters:
- fullName String
- options Object
registerOptionsForType
(type, options)
public
Allow registering options for all factories of a type.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
var App = Ember.Application.create(); var appInstance = App.buildInstance(); // if all of type `connection` must not be singletons appInstance.optionsForType('connection', { singleton: false }); appInstance.register('connection:twitter', TwitterConnection); appInstance.register('connection:facebook', FacebookConnection); var twitter = appInstance.lookup('connection:twitter'); var twitter2 = appInstance.lookup('connection:twitter'); twitter === twitter2; // => false var facebook = appInstance.lookup('connection:facebook'); var facebook2 = appInstance.lookup('connection:facebook'); facebook === facebook2; // => false |
Parameters:
- type String
- options Object
registeredOption
(fullName, optionName)
Object
public
Return a specific registered option for a particular factory.
Returns:
- Object
- options
registeredOptions
(fullName)
Object
public
Return registered options for a particular factory.
Parameters:
- fullName String
Returns:
- Object
- options
registeredOptionsForType
(type)
Object
public
Return the registered options for all factories of a type.
Parameters:
- type String
Returns:
- Object
- options
resolveRegistration
(fullName)
Function
public
Given a fullName return the corresponding factory.
Parameters:
- fullName String
Returns:
- Function
- fullName's factory
unregister
(fullName)
public
Unregister a factory.
1 2 3 4 5 6 7 8 |
var App = Ember.Application.create(); var User = Ember.Object.extend(); App.register('model:user', User); App.resolveRegistration('model:user').create() instanceof User //=> true App.unregister('model:user') App.resolveRegistration('model:user') === undefined //=> true |
Parameters:
- fullName String