Class ContainerProxy
privateThe interface for a container proxy, which is itself a private API used
by the private ContainerProxyMixin
as part of the base definition of
EngineInstance
.
factoryFor (fullName) FactoryManager public
Inherited from BasicContainer packages/@ember/-internals/owner/index.ts:247
- fullName
- String
- returns
- FactoryManager
Given a FullName
, of the form "type:name"
return a FactoryManager
.
This method returns a manager which can be used for introspection of the factory's class or for the creation of factory instances with initial properties. The manager is an object with the following properties:
class
- The registered or resolved class.create
- A function that will create an instance of the class with any dependencies injected.
For example:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import { getOwner } from '@ember/application'; let owner = getOwner(otherInstance); // the owner is commonly the `applicationInstance`, and can be accessed via // an instance initializer. let factory = owner.factoryFor('service:bespoke'); factory.class; // The registered or resolved class. For example when used with an Ember-CLI // app, this would be the default export from `app/services/bespoke.js`. let instance = factory.create({ someProperty: 'an initial property value' }); // Create an instance with any injections and the passed options as // initial properties. |
Any instances created via the factory's .create()
method must be destroyed
manually by the caller of .create()
. Typically, this is done during the creating
objects own destroy
or willDestroy
methods.
lookup (fullName, options) Any public
Inherited from BasicContainer packages/@ember/-internals/owner/index.ts:198
- fullName
- String
- options
- RegisterOptions
- returns
- Any
Given a fullName return a corresponding instance.
The default behavior is for lookup to return a singleton instance. The singleton is scoped to the container, allowing multiple containers to all have their own locally scoped singletons.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
let registry = new Registry(); let container = registry.container(); registry.register('api:twitter', Twitter); let twitter = container.lookup('api:twitter'); twitter instanceof Twitter; // => true // by default the container will return singletons let twitter2 = container.lookup('api:twitter'); twitter2 instanceof Twitter; // => true twitter === twitter2; //=> true |
If singletons are not wanted an optional flag can be provided at lookup.
1 2 3 4 5 6 7 8 9 |
let registry = new Registry(); let container = registry.container(); registry.register('api:twitter', Twitter); let twitter = container.lookup('api:twitter', { singleton: false }); let twitter2 = container.lookup('api:twitter', { singleton: false }); twitter === twitter2; //=> false |