Git Product home page Git Product logo

injector's Introduction

Yii Injector


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

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

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)

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

// 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
]);

Installation

The preferred way to install this package is through composer:

composer require yiisoft/injector

Documentation

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.