MixedImmutableEnvironment
An injection environment implementation with a mixed evaluation strategy.
Mixed evaluation strategy here means that:
Components are created eagerly, i.e. when this environment is created
Injections are performed lazily within the same component, e.g. a component A that wants to have B injected will only actually get B when A performs a
get
on B.
Mixed evaluation allows for lock-free thread safety for component creation and occasional locking thread safety on injections.
Due to injections being made lazily, this environment supports cyclic dependencies (class A requires B, class B requires A) and self-injections (class C requires itself).
Characteristics
Eager object creation. Objects are created upon construction of this environment.
Lazy object injection. Objects are injected upon first use, and are only computed once.
Idempotent/Immutable. Objects cannot be replaced, injection methods will always return the same thing.
Compatible with installable extensions.
Constructors
Functions
Creates an Injector that can be used as a property delegator, bound against the given identifier.
Performs the internal logic required for setting up a meta-environment. When creating extensible environments, you should either call this function to create your meta environment, or subclass DefaultExtensibleInjectionEnvironment which will do it for you.
Gets the component identified by the given type turned into an Identifier with an optional qualifier. Throws an exception if no component with this identifier exists.
Returns a sequence of all the known identifiers present in this environment.
Retrieve the fundef wrapper for the given function, or throw an exception if no such fundef could be found.
Gets the component identified by the given type turned into an Identifier with an optional qualifier. Returns null if no component with this identifier exists.
Returns the resolver associated with the given identifier.