Get support for yiisoft/injector

If you're new to LTH, please see our FAQ for more information on what it is we do.

Support Options

Unfortunately, there are currently no active helpers for this repository on the platform. Until they become available, we reccomend the following actions:

View Open Issues

Take a look to see if anyone else has experienced the same issue as you and if they managed to solve it.

Open an Issue

Make sure to read any relevant guidelines for opening issues on this repo before posting a new issue.

Sponsor directly

Check out the page and see if there are any options to sponsor this project or it's developers directly.

yiisoft/injector

Latest Stable Version Total Downloads Build status Code Coverage Scrutinizer Code Quality Mutation testing badge static analysis type-coverage

A dependency injection implementation based on autowiring and PSR-11 compatible dependency injection containers.

Features

  • Injects dependencies when calling functions and creating objects
  • Works with any dependency injection container (DIC) that is PSR-11 compatible
  • Accepts additional dependencies and arguments passed as array
  • Allows passing arguments by parameter name in the array
  • Resolves object type dependencies from the container and the passed array by parameter type declaration
  • Resolves variadic arguments i.e. function (MyClass ...$a)

Requirements

  • PHP 7.4 or higher.

Installation

The package could be installed with Composer:

composer require yiisoft/injector

About

Injector can automatically resolve and inject dependencies when calling functions and creating objects.

It therefore uses Reflection to analyze the parameters of the function to call, or the constructor of the class to instantiate and then tries to resolve all arguments by several strategies.

The main purpose is to find dependency objects - that is arguments of type object that are declared with a classname or an interface - in a (mandatory) PSR-11 compatible dependency injection container (DIC). The container must therefore use the class or interface name as ID.

In addition, an array with arguments can be passed that will also be scanned for matching dependencies. To make things really flexible (and not limited to objects), arguments in that array can optionally use a function parameter name as key. This way basically any callable can be invoked and any object be instantiated by the Injector even if it uses a mix of object dependencies and arguments of other types.

Basic Example

use Yiisoft\Injector\Injector;

// A function to call
$fn = function (\App\Foo $a, \App\Bar $b, int $c) { /* ... */ };

// Arbitrary PSR-11 compatible object container
$container = new \some\di\Container([
    'App\Foo' => new Foo(), // will be used as $a
]);

// Prepare the injector
$injector = new Injector($container);

// Use the injector to call the function and resolve dependencies
$result = $injector->invoke($fn, [
    'c' => 15,  // will be used as $c
    new Bar(),  // will be used as $b
]);

Caching reflection objects

Enable caching of reflection objects to improve performance by calling withCacheReflections(true):

use Yiisoft\Injector\Injector;

$injector = (new Injector($container))
    ->withCacheReflections(true);

By default, caching is disabled.

Documentation

If you need help or have a question, the Yii Forum is a good place for that. You may also check out other Yii Community Resources.

License

The Yii Injector is free software. It is released under the terms of the BSD License. Please see LICENSE for more information.

Maintained by Yii Software.

Support the project

Open Collective

Follow updates

Official website Twitter Telegram Facebook Slack

Our Mission

We want to make open source more sustainable. The entire platform was born from this and everything we do is in aid of this.

Interesting Articles

Thank you for checking out LiveTechHelper |
2025 © lth-dev incorporated

p-e622a1a2