What's New With 6.6.0
Major Updates
WireBox Child Injectors
Welcome to the world of hierarchical dependency injection. We had the ability before to add a parent injector to WireBox, but now you can not only add a parent, but also many children to the hierarchy.
Every injector has the capability to store an ordered collection (ordered struct
) of child injectors via the childInjectors
property. Child injectors are used internally in many instances to provide a hierarchical approach to DI where instances can be searched for locally, in the parent and in the children. Here are some of the new methods to assist with child injectors:
hasChildInjector( name )
- Verify if a child injector has been registeredregisterChildInjector( name, child )
- Register a child injector by nameremoveChildInjector( name )
- Remove a child injector by namegetChildInjector( name )
- Get a child injector by namegetChildInjectors()
- Get all the child injectors registeredgetChildInjectorNames()
- Get an array of all the registered child injectors
Child Enhanced Methods
getInstance()
The
getInstance()
method now has aninjector
argument so you can EXPLICITLY request an instance from a child injector by namegetInstance( name : "service", injector : "childInjector" )
Apart from the explicit lookup it can also do implicit hierarchical lookups using the following order:
Locally
Parent
All Children (in order of registration)
containsInstance( name )
- This method now also searches in the child collection for the specificname
instance. The lookup searches in the following order:Locally
Parent
Children
shutdown()
- The shutdown method has been enhanced to issue shutdown method calls to all child injectors registered.
Getting Instances From Specific Child Injectors
The getInstance()
has been modified to have an injector
argument that you can use to specifically ask for an instance from that child injector. If the child injector has not been registered you will get a InvalidChildInjector
Exception.
Child Injector Explicit DSL
The following is the DSL you can use to explicitly target a child injector for a dependency. You will prefix it with wirebox:child:{name}
and the name of the injector:
IInjector Interface Updates
The coldbox.system.ioc.IInjector
interface's getInstance()
method has been modified to include support for child injector retrievals:
Release Notes
Bug
WIREBOX-124 Killing
IInjector
interface usages due to many issues across cfml engines, leaving them for docs onlyWIREBOX-118 Never override an existing variables key with virtual inheritance
Improvement
WIREBOX-120 DSLs process method now receives the caller
targetID
alongside thetargetObject
and thetarget
definition
New Feature
WIREBOX-122 New wirebox DSL to inject the target's metadata that's cached in the target's binder:
wirebox:objectMetadata
WIREBOX-121 New WireBoxDSL:
wirebox:targetID
to give you back the target ID used when injecting the objectWIREBOX-119 Missing
coldbox:schedulerService
DSLWIREBOX-117 HDI - Ability for injectors to have a collection of child injectors to delegate lookups to, basically Hierarchical DI
Task
WIREBOX-123 Removal of usage of Injector dsl interface due to so many issues with multiple engines.
Last updated