abmmhasan/di-container

该包已被弃用,不再维护。作者建议使用infocyph/intermix包。

简单的依赖注入器

1.00 2020-12-31 07:28 UTC

This package is auto-updated.

Last update: 2024-04-26 05:45:00 UTC


README

License: MIT

此库动态解决构造函数和方法依赖(也适用于闭包)。以下是一些示例。

仓库已存档/弃用。

建议使用https://github.com/abmmhasan/OOF代替!

先决条件

语言:PHP 7.0/+

安装

composer require abmmhasan/di-container

使用方法

示例 01:带有额外参数

/**
* A test class where we resolving dependency for
* both constructor and defined method
*/
class TestClass
{
    public function __construct(Sample1 $sample, $id)
    {
        return [$sample->all(),$id];
    }

    public function getRequest(Sample2 $sample, $pid, $sid)
    {
        return [$sample->all(),$pid,$sid];
    }
}

/**
* Pass the class as first parameter
* In second parameter pass the value as comma separated which will be
* resolved to class __construct
*/
$class = new Container(TestClass::class,23); // TestClass: Class we resolving, 23: $id param
// or,
$class = initiate(TestClass::class,23);
/**
* Afterwards we call any methods of that class
* 'getRequest()' is a method of 'TestClass' that we are calling.
* Extra parameter can be sent as comma separated, which will be resolved to given method
*/
$value = $class->getRequest(34,43);

示例 02:无额外参数

/**
* A test class where we resolving dependency for
* both constructor and defined method
*/
class TestClass
{
    public function __construct(Sample1 $sample)
    {
        return [$sample->all()];
    }

    public function getRequest(Sample2 $sample)
    {
        return [$sample->all()];
    }
}

/**
* Only send parameter if required
*/
$class = new Container(TestClass::class); // TestClass: Class we resolving
// or,
$class = initiate(TestClass::class);
/**
* Same as above
*/
$value = $class->getRequest();

示例 03:闭包

$myClosure = function (Request $request, $test, $rest) {
                     print_r($request);
                     echo "I'm inside[$test,$rest]";
                 };
$class = new Container($myClosure, 23, 34); // Pass the closure
// or,
$class = initiate($myClosure, 23, 34);

示例 04:我不需要任何依赖解析

/**
* From example 02 (same for 01 but not applicable for 03: Closure)
 */
$class = new Container(TestClass::class); // TestClass: Class we resolving
// or,
$class = initiate(TestClass::class);
/**
* Add this additional call before doing any method call
*/
$class->_noInject();
/**
* Now do calls as usual
 */
$value = $class->getRequest();

支持

遇到问题?创建一个问题!