hexinject 0.17.0

Dependency injector with very fast injections

Released 2017-03-20.

To install, run:

haxelib install hexinject 0.17.0

See using Haxelib in Haxelib documentation for more information.

This is not the latest stable version of hexinject. See version 0.21.1 for the latest version.

Maintainerdoclerlabs
Websitehttps://github.com/DoclerLabs/hexInject
Current version0.21.1
StatisticsInstalled 497 times
LicenseMIT
Tags dependency, haxe, hexmachina, injection

README.md

hexInject TravisCI Build Status

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
    }
}