Skip to content

Customized injection

Daan van Yperen edited this page Sep 29, 2015 · 7 revisions

Customized injection

By default, the World injects dependencies as described for @Wire during construction. This is done by an Injector registered with the WorldConfiguration. If greater control is needed, you can provide your own Injector with a customized FieldHandler.

Example

The below code creates a FieldHandler which will contain two field FieldResolvers: ArtemisFieldResolver and CustomFieldsResolver. In this case, the WiredFieldResolver is not part of the world configuration, so unless the CustomFieldsResolver handles fields annotated with @Wire, these fields will not be injected. Systems, Managers, ComponentMappers & EntityFactories will still be injected.

FieldHandler fieldHandler = new FieldHandler(new InjectionCache());
fieldHandler.addFieldResolver(new CustomFieldsResolver());

Injector injector = new CachedInjector().setFieldHandler(fieldHandler);
World world = new World(new WorldConfiguration().setInjector(injector));

Injector

The injector can be customized using WorldConfiguration.setInjector prior to calling new World(). The injector determines which classes are eligible for dependency injection, and delegates to a FieldHandler to resolve the actual value for each field in a class.

Artemis provides the CachedInjector which should be useful in most cases. By configuring aIn the below example, a new world is created

Clone this wiki locally