GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - chubbyphp/chubbyphp-container: A minimal Dependency Injection Container (DIC) which implements PSR-11.

BranchesTags
Open more actions menu

Latest commit

 

History

88 Commits
88 Commits

Folders and files

NameName
Last commit message
Last commit date
.github/workflows
.github/workflows
 
 
doc
doc
 
 
src
src
 
 
tests
tests
 
 
.gitattributes
.gitattributes
 
 
.gitignore
.gitignore
 
 
.php-cs-fixer.php
.php-cs-fixer.php
 
 
LICENSE
LICENSE
 
 
README.md
README.md
 
 
composer.json
composer.json
 
 
infection.json
infection.json
 
 
phpstan.neon
phpstan.neon
 
 
phpunit.xml
phpunit.xml
 
 
sonar-project.properties
sonar-project.properties
 
 

Repository files navigation

chubbyphp-container

CI Coverage Status Mutation testing badge Latest Stable Version Total Downloads Monthly Downloads

bugs code_smells coverage duplicated_lines_density ncloc sqale_rating alert_status reliability_rating security_rating sqale_index vulnerabilities

Description

A minimal Dependency Injection Container (DIC) which implements PSR-11. DI Container Benchmark.

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

Requirements

  • php: ^8.3
  • psr/container: ^2.0.2

Installation

Through Composer as chubbyphp/chubbyphp-container.

composer require chubbyphp/chubbyphp-container "^2.5"

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): MyService {
        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): MyService {
    return new MyService($container->get(LoggerInterface::class));
});

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

// existing (extend)
$container->factory(
    MyService::class,
    static function (ContainerInterface $container, callable $previous): MyService {
        $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 factory

<?php

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

$container = new MinimalContainer();

$myServiceFactory = $container->getFactory(MyService::class);

$myService = $myServiceFactory($container);

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): MyService {
        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): MyService {
        return new MyService($container->get(LoggerInterface::class));
    }
);

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

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

        return $myService;
    }
);

Migration

  • From Pimple

Copyright

2026 Dominik Zogg

About

A minimal Dependency Injection Container (DIC) which implements PSR-11.

Topics

chubbyphp-containercontainerpsr-11servicefactory

Resources

Readme
MIT license
Activity
Custom properties

Stars

20 stars

Watchers

1 watching

Forks

1 fork
Report repository

Releases

Packages

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.