| What's dependency injection(DI)?
================================
Just look at the article and watch that awesome video:
http://blog.ircmaxell.com/2013/01/dependency-injection-programming-with.html
How do i register items(services)?
==================================
    If the class does not have any deps- just skip this step!!!
First of all you have to register all dependencies, but keep in mind that:
    class App
    {
        // you can use this trait and implement getInjectables()
        // that returns associative array with named params that
        // could not be skipped or added with defined default values
        use Pyha\DI\Injectable;
        public function getInjectables()
        {
            return [
                'stringHere' => "hello world!"
            ];
        }
        /**
         * @param string $stringHere
         */
        public function __construct(AnyClassHere $thing, $stringHere)
        {
        }
    }
    class Foo
    {
        public function __construct(App $app)
        {
        }
    }
    class Bar extends Foo { }
    // i would like to get it via DI Factory
    class WeWannaGet
    {
        public function __construct(Bar $bar)
        {
        }
    }
    // in order to get this working we need... //
    // 1. register only top dependency
    Pyha\DI\Factory::getInstance()->register(
        new App(new AnyClassHere(), 'string here')
    );
    // or
    Pyha\DI\Factory::getInstance()->register(
            Pyha\DI\Factory::getInstance()->get('App')
        );
    // or (if app does not use injectable trait or do not get named param via getInjectables() method)
    Pyha\DI\Factory::getInstance()->register(
                Pyha\DI\Factory::getInstance()->get('App', ['stringHere' => "hello world!"])
            );
    // that u can use
    Pyha\DI\Factory::getInstance()->get('WeWannaGet'); // to get instance only once, just what an singleton does
    Pyha\DI\Factory::getInstance()->create('WeWannaGet'); // to create new instance each time
To register aliases use addAlias() Factory method.
NOTE: if as a service parameter to the register method is provided an object
by default are registered several service aliases. This are:
	- All Interfaces names implemented
	- All parent classes from extension tree
	- All Traits used
If you do not wannt to register this aliases, take a look at the method prototype:
	
	public function register($name,
                             	 $service,
                             	 $registerSelfAsAlias = true,
                             	 $registerInterfacesAsAliases = true,
                             	 $registerParentsAsAliases = true);
Services ca be objects, closures, string(classes names)
Loading Library
===============
If you are not using Composer you may add to autoloader the lib path or even include the files manualy
Installing via Composer
=======================
To install it via composer just use following command:
    $ composer.phar install
 |