Skip to end of metadata
Go to start of metadata

In contrast to Gin, the Errai IOC container does not provide a programmatic way of creating and configuring injectors. Instead, container-level binding rules are defined by implementing a Provider, which is scanned for and auto-discovered by the container.

A Provider is essentially a factory which produces type instances within in the container, and defers instantiation responsibility for the provided type to the provider implementation. Top-level providers use the standard javax.inject.Provider<T> interface.

Types made available as top-level providers will be available for injection in any managed component within the container.

Out of the box, Errai IOC implements these default top-level providers, all defined in the org.jboss.errai.ioc.client.api.builtin package:

  • CallerProvider : Makes RPC Caller<T> objects available for injection.
  • DisposerProvider : Makes Errai IoC Disposer<T> objects available for injection.
  • InitBallotProvider : Makes instances of InitBallot available for injection.
  • IOCBeanManagerProvider : Makes Errai's client-side bean manager, ClientBeanManager, available for injection.
  • MessageBusProvider : Makes Errai's client-side MessageBus singleton available for injection.
  • RequestDispatcherProvider : Makes an instance of the RequestDispatcher available for injection.
  • RootPanelProvider : Makes GWT's RootPanel singleton injectable.
  • SenderProvider : Makes MessageBus Sender<T> objects available for injection.

Implementing a Provider is relatively straight-forward. Consider the following two classes:

If you are familiar with Guice, this is semantically identical to configuring an injector like so:

As shown in the above example code, the annotation @IOCProvider is used to denote top-level providers.

The classpath will be searched for all annotated providers at compile time.

Top-level providers are regular beans, so they can inject dependencies–particularly from other top-level providers–as necessary.
Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.