@hacksawstudios/hexinject
v1.0.0-alpha.5
Published
Fast annotation driven IOC solution for Haxe based on hexAnnotation (annotation parsing at compile time)
Readme
hexInject 
Fast annotation driven IOC solution for Haxe based on hexAnnotation (annotation parsing at compile time)
Find more information about hexMachina on hexmachina.org
Dependencies
Features
- Injections configurable by standardized annotations.
- Injections allowed for properties, methods and constructors.
- Injections can be optional.
- Mapping by type and optionally by name.
- Value, class instance or singleton can satisfy dependencies.
- Injectors chaining.
- Object live-cycle management.
- Event-driven.
- Exception handling.
- Supports ordered post-constructor methods.
- Supports ordered pre-destroy methods.
Simple example
var injector = new Injector;
//create a basic mapping:
injector.map( Model ).toType( Model );
//map to another class:
injector.map( Model ).toType( BetterModel );
//map an interface to a value:
injector.map( IEventDispatcher ).toValue( new EventDispatcher() );
//map an interface to a singleton:
injector.map( IEventDispatcher ).toSingleton( EventDispatcher );Properties injection
class MockClass implements IInjectorContainer
{
@Inject
public var property1 : Interface;
@Inject( "name" )
public var property2 : Interface;
public function new() {}
}Constructor injections with one named and optional
class MockClass implements IInjectorContainer
{
var m_dependency : IModel;
var m_dependency2 : String;
@Inject( null, "name" )
@Optional( false, true )
public function new( dependency : IModel, dependency2 : String = "hello world" )
{
this.m_dependency = dependency;
this.m_dependency2 = dependency2;
}
}Method injections with named dependencies
class MockClass implements IInjectorContainer
{
var m_dependency : IModel;
var m_dependency2 : String;
public function new() {}
@Inject( "name1", "name2" ) : Void
public function setDependencies( dependency : IModel, dependency2 : String )
{
this.m_dependency = dependency;
this.m_dependency2 = dependency2;
}
}Postconstruct methods
class MockClass implements IInjectorContainer
{
public function new() {}
@PostConstruct( 0 )
public function doSomething() : Void
{
//this method will be called after constructor
}
@PostConstruct( 1 )
public function doSomethingMore() : Void
{
//this method will be called after 'doSomething' call
}
}Predestroy methods
class MockClass implements IInjectorContainer
{
public function new() {}
@PreDestroy( 0 )
public function doSomething() : Void
{
//this method will be called when this instance will be destroyed
}
@PreDestroy( 1 )
public function doSomethingMore() : Void
{
//this method will be called after 'doSomething' call
}
}