hexinject

Dependency injector with very fast injections
https://github.com/DoclerLabs/hexInject

To install, run:

haxelib install hexinject 1.0.0-alpha.3 

See using Haxelib in Haxelib documentation for more information.

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
    }
}
Contributors
doclerlabs
Version
1.0.0-alpha.3
Published
1 week ago
License
MIT

All libraries are free

Every month, more than thousand developers use haxelib to find, share, and reuse code — and assemble it in powerful new ways. Enjoy Haxe; It is great!

Explore Haxe

Haxe Manual

Haxe Code Cookbook

Haxe API documentation

You can try Haxe in the browser! try.haxe.org

Join us on Github!

Haxe is being developed on GitHub. Feel free to contribute or report issues to our projects.

Haxe on Github