chubbyphp/chubbyphp-container

A simple PSR-11 container implementation.

1.3.0 2020-09-18 15:32 UTC

This package is auto-updated.

Last update: 2020-09-18 15:34:39 UTC


README

Build Status Coverage Status Latest Stable Version Total Downloads Monthly Downloads Daily Downloads

bugs code_smells coverage duplicated_lines_density ncloc sqale_rating alert_status reliability_rating security_rating sqale_index vulnerabilities

Description

A PSR-11 container implementation. DI Container Benchmark.

There is a laminas service manager adapter at chubbyphp/chubbyphp-laminas-config.

Requirements

Installation

Through Composer as chubbyphp/chubbyphp-container.

composer require chubbyphp/chubbyphp-container "^1.3"

Usage

There are two PSR-11 implementations:

  • Chubbyphp\Container\Container prototype (each get will return a new instance) and shared services
  • Chubbyphp\Container\MinimalContainer shared services

MinimalContainer / Container

Factories

<?php

use App\Service\MyService;
use Chubbyphp\Container\MinimalContainer;
use Psr\Container\ContainerInterface;
use Psr\Log\LoggerInterface;

$container = new MinimalContainer();
$container->factories([
    MyService::class => static function (ContainerInterface $container) {
        return new MyService($container->get(LoggerInterface::class));
    },
]);

Factory

<?php

use App\Service\MyService;
use Chubbyphp\Container\MinimalContainer;
use Psr\Container\ContainerInterface;
use Psr\Log\LoggerInterface;

$container = new MinimalContainer();

// new
$container->factory(MyService::class, static function (ContainerInterface $container) {
    return new MyService($container->get(LoggerInterface::class));
});

// existing (replace)
$container->factory(MyService::class, static function (ContainerInterface $container) {
    return new MyService($container->get(LoggerInterface::class));
});

// existing (extend)
$container->factory(
    MyService::class,
    static function (ContainerInterface $container, callable $previous) {
        $myService = $previous($container);
        $myService->setLogger($container->get(LoggerInterface::class));

        return $myService;
    }
);

Factory with Parameter

<?php

use Chubbyphp\Container\MinimalContainer;
use Chubbyphp\Container\Parameter;

$container = new MinimalContainer();
$container->factory('key', new Parameter('value'));

Get

<?php

use App\Service\MyService;
use Chubbyphp\Container\MinimalContainer;

$container = new MinimalContainer();

$myService = $container->get(MyService::class);

Has

<?php

use App\Service\MyService;
use Chubbyphp\Container\MinimalContainer;

$container = new MinimalContainer();
$container->has(MyService::class);

Container

All methods of the MinimalContainer and the following:

Prototype Factories

each get will return a new instance

<?php

use App\Service\MyService;
use Chubbyphp\Container\Container;
use Psr\Container\ContainerInterface;
use Psr\Log\LoggerInterface;

$container = new Container();
$container->prototypeFactories([
    MyService::class => static function (ContainerInterface $container) {
        return new MyService($container->get(LoggerInterface::class));
    },
]);

Prototype Factory

each get will return a new instance

<?php

use App\Service\MyService;
use Chubbyphp\Container\Container;
use Psr\Container\ContainerInterface;
use Psr\Log\LoggerInterface;

$container = new Container();

// new
$container->prototypeFactory(MyService::class, static function (ContainerInterface $container) {
    return new MyService($container->get(LoggerInterface::class));
});

// existing (replace)
$container->prototypeFactory(MyService::class, static function (ContainerInterface $container) {
    return new MyService($container->get(LoggerInterface::class));
});

// existing (extend)
$container->prototypeFactory(
    MyService::class,
    static function (ContainerInterface $container, callable $previous) {
        $myService = $previous($container);
        $myService->setLogger($container->get(LoggerInterface::class));

        return $myService;
    }
);

Migration

Copyright

Dominik Zogg 2020