Dependency Injection

WARP uses Guice for some dependency bindings.

In particular, we bind a concrete implementation of AbstractMeasurementCollectionController, an implementation of WarpPropertyLike (which enumerates all the available runtime configuration parameters), and provide an extension hook for users to bind additional tinylog Writers.

The binding module we provide out of the box in DefaultWarpModule should be fine for most use cases. However, advanced users can implement their own bindings in a new module and set the system property wd.warp.inject.module with the fully qualified value of their module class.

Internally, we use an augmented MeasurementCollectionController, a slightly different schema with different implementations for PersistenceUtils, and an extended version of CoreWarpPropery.