Class RegistryProxyMixin

private

RegistryProxyMixin is used to provide public access to specific registry functionality.

Show:

Module: ember
fullName
String
returns
Boolean

Check if a factory is registered.

Module: ember
factoryNameOrType
String
property
String
injectionName
String

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.

Module: ember
fullName
String
type:name (e.g., 'model:user')
factory
Function
(e.g., App.Person)
options
Object
(optional) disable instantiation or singleton usage

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 });
Module: ember
fullName
String
optionName
String
options
Object

Register an option for a particular factory.

Module: ember
fullName
String
options
Object

Register options for a particular factory.

Module: ember
type
String
options
Object

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
Module: ember
fullName
String
optionName
String
returns
Object
options

Return a specific registered option for a particular factory.

Module: ember
fullName
String
returns
Object
options

Return registered options for a particular factory.

Module: ember
type
String
returns
Object
options

Return the registered options for all factories of a type.

Module: ember
fullName
String
returns
Function
fullName's factory

Given a fullName return the corresponding factory.

Module: ember
fullName
String

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