Mohamed-Amine / ioc-container
控制反转容器
v0.8.3
2024-06-06 23:41 UTC
Requires
- php: ^8.3
- phpunit/phpunit: ^11.1
This package is auto-updated.
Last update: 2024-09-07 00:12:21 UTC
README
如何安装
通过composer
composer require mohamed-amine/ioc-container
它能做什么
- 自动创建实例并解析它们的依赖项。
- 如果已注册,则可以从类型(如接口)解析依赖项。
- 从已注册的服务定位器创建实例。
- 将现有实例绑定到容器中(可用于服务提供者)。
- 在任何地方调用容器中的实例。
如何使用它
创建容器
为了使用所有功能,我们首先需要创建一个容器
IOC\IOC::createContainer();
在容器中创建实例
- 为了创建一个实例并自动解析其依赖项
IOC\IOC::container()->build('namespace\MyClass');
这将创建MyClass对象,并为它创建所有递归依赖项,例如
// instead of doing this new MyClass(new ClassA(), new ClassB()); // you can just do this and it will create ClassA & ClassB and pass them automatically IOC\IOC::container()->build('namespace\MyClass');
为了使这起作用,您需要在MyClass构造函数中使用类型提示
... public function __constructor(ClassA $classa, ClassB $classb) {...} ...
- 如果实例需要参数,我们应该将它们作为数组传递给'build()'的第二个参数(注意,在此情况下不能使用自动依赖项解析)
IOC\IOC::container()->build('namespace\MyClass', $argument1, $argument2);
将实例绑定到容器中
要将现有实例绑定到容器中
IOC\IOC::bind('MyClass',function() { return new namespace\MyClass(); });
现在我们可以在应用程序的任何地方访问我们的实例,如下所示
IOC\IOC::container()->MyClass; // or IOC\IOC::container()->get('MyClass');
从服务定位器(简称)构建实例
我们可以使用register方法定义服务定位器
IOC\IOC::container()->register('MyClass', namespace\MyClass::class);
然后我们可以使用此服务定位器构建一个实例
IOC\IOC::container()->build('MyClass');
注册类型
注册类型以帮助容器解析类依赖项,例如,如果类A依赖于Type SomeInterface,这是一个接口,我们将首先注册此类型,以便能够解析它
IOC\IOC::container()->registerType('SomeInterface', Namespace\SomeClass::class);
从容器调用实例
我们可以使用两种方法从容器调用实例
IOC\IOC::container()->MyInstance; // Or IOC\IOC::container()->get('MyInstance');