Package org.eclipse.sisu.wire


package org.eclipse.sisu.wire
Customizable wiring of unresolved dependencies. Use this to share components across injectors, apply configuration, and form on-demand collections.

The WireModule should enclose all modules in your application:

Guice.createInjector( new WireModule( bootModule, configModule, mainModule ) );
Use the ChildWireModule when you want to wire child injectors:
injector.createChildInjector( new ChildWireModule( serviceModule, subModule ) );

The default wiring strategy is to use LocatorWiring which can supply the following bindings via the BeanLocator:

Instances

@Inject MyType bean

@Inject @Named("hint") MyType namedBean

@Inject @MyQualifier MyType qualifiedBean

@Inject Provider<MyType> beanProvider

Configuration

@Inject @Named("${my.property.name}") File file                      // supports basic type conversion

@Inject @Named("${my.property.name:-http://example.org/}") URL url   // can give default in case property is not set

@Inject @Named("${my.property.name:-development}") MyType bean       // can be used to pick specific @Named beans

@Inject @Named("my.property.name") int port                          // shorthand syntax

You can bind your configuration at runtime as follows:

bind( ParameterKeys.PROPERTIES ).toInstance( myConfiguration );      // multiple bindings are merged into one view

Collections

The following collections are both dynamic and thread-safe, elements may come and go as injectors are added or removed from the BeanLocator.

They are also lazy, meaning instances are created as you access elements of the collection; the elements are then re-used for the same collection.

@Inject List<MyType> list

@Inject List<Provider<MyType>> providers

@Inject Iterable<BeanEntry<MyQualifier, MyType>> entries             // gives access to additional metadata
@Inject Map<String, MyType> stringMap                                // strings are taken from @Named values

@Inject Map<Named, MyType> namedMap

@Inject Map<MyQualifier, MyType> qualifiedMap

@Inject Map<String, Provider<MyType>> providerMap