@hacksawstudios/hexinject

1.0.0-alpha.5 • Public • Published

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

Package Sidebar

Install

npm i @hacksawstudios/hexinject

Weekly Downloads

1

Version

1.0.0-alpha.5

License

ISC

Unpacked Size

198 kB

Total Files

115

Last publish

Collaborators

  • hacksaw_studios
  • karl_r