1.0.0-alpha.5 • Published 6 years ago

@hacksawstudios/hexinject v1.0.0-alpha.5

Weekly downloads
-
License
ISC
Repository
github
Last release
6 years ago

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