This package is abandoned and no longer maintained. The author suggests using the orno/di package instead.

Fast Dependency Injection Container for PHP 5.3+

1.2.0 2013-08-04 22:55 UTC

This package is not auto-updated.

Last update: 2022-02-01 12:26:21 UTC


Build Status Dependencies Status Coverage Status Total Downloads Latest Stable Version

DEPRECATED: Use Orno\Di instead as the two are incredibly similar, and theirs is more actively developed.

The League\Di library provides a fast and powerful Dependency Injection Container for your application.


Via Composer

    "require": {
        "league/di": ">=1.1"


Get a Container Object

include 'vendor/autoload.php';

$container = new League\Di\Container;

Bind a concrete class to an interface

$container->bind('\Foo\Bar\BazInterface', '\Foo\Bar\Baz');

Automatic Dependency Resolution

The Di Container is able to recursively resolve objects and their dependencies by inspecting the type hints on an object's constructor.

namespace Foo\Bar;

class Baz
  public function __construct(Qux $qux, Corge $corge)
    $this->qux = $qux;
    $this->corge = $corge;

  public function setQuux(Quux $quux)
    $this->quux = $quux;


Defining Arguments

Alternatively, you can specify what to inject into the class upon instantiation.

Define Constructor Args

$container->bind('\Foo\Bar\Baz')->addArgs(array('\Foo\Bar\Quux', '\Foo\Bar\Corge'));


Define Methods to Call with Args

$container->bind('\Foo\Bar\Baz')->withMethod('setQuux', array('\Foo\Bar\Quux'));


Child Containers and Scope Resolution

A great feature of League\Di is it's ability to provide child containers with a separate resolution scope to that of it's parent container. If you bind a concrete class to an interface within one container, you can re-bind it in the child container, without fear of overwriting the original binding in the parent container.

Creating a Child Container

There are two ways to create a child container.

$child = $continer->createChild();

// OR

$child = new Container($container);

Using a Child Container

The primary benefit of using child containers is scope-specific resolution.

$container->bind('FooInterface', 'Foo');

// Assuming class Bar has a FooInterface dependency.
// This would use the Foo implementation.
$bar = $container->resolve('Bar');

// ...
$child = $container->createChild();
$child->bind('FooInterface', 'Baz');

// And this would use the Baz implementation.
$bar = $child->resolve('Bar');


  • Extensive Documentation


Please see CONTRIBUTING for details.



The MIT License (MIT). Please see License File for more information.