azexsoft/di
Composer 安装命令:
composer require azexsoft/di
包简介
Azexsoft Dependency Injection
README 文档
README
Simple PSR-11 compatible dependency injection container and injector based on autowiring that is able to instantiate and configure classes resolving dependencies. Works only with classes and interfaces. Works with PHP 7.1+ and 8.0+.
Features
- PSR-11 compatible.
- Detects circular references.
- Supports classname, object and Closure bindings.
- Supports service providers and deferred service providers.
- Injector resolves dependencies for definitions when building class and invoke dependencies.
- Injector supports array definitions with method arguments and properties resolving dependencies.
Configure container
Just create container instance with an array of bindings and array of service providers.
// Bindings $bindings = [ FooInterface::class => Foo::class, // Classname binding Baz::class => new Baz(), // Object binding // Closure binding with DI resolving in Closure params Bar::class => fn(\Azexsoft\Di\Injector $injector) => $injector->build( Bar::class, [ 'config' => $params['barConfig'], 'someParameter' => 123 ] ), ]; // Service providers $providers = [ ApplicationServiceProvider::class, new FooServiceProvider(), ]; $container = new \Azexsoft\Di\Container($bindings, $providers);
Also, you can add bindings and providers after container be configurated. After rebinding old instance will be removed from container.
$foo = $container->get(FooInterface::class); // will be returned Foo $container->bind(FooInterface::class, OtherFoo::class); $otherFoo = $container->get(FooInterface::class); // will be returned OtherFoo
Array definitions for injector builder. Works for bind() and provide() methods.
$container->bind(Abstract::class, [ '__class' => Concrete::class, // Concrete classname '__construct()' => [ 'simpleParam' => 123, 'otherSimpleParam' => $params['concreteSomeParam'], 'someObject' => new Definition(fn(Dependency $d) => $d->getSomeObject()), ], 'someMethod()' => [ 'methodParam' => $params['someMethodParam'], ], 'someProperty' => 321 ]);
Instead of:
$container->bind(Abstract::class, function(Injector $injector, Dependency $d) use ($params) { $concrete = $injector->build(Concrete::class, [ 'simpleParam' => 123, 'otherSimpleParam' => $params['concreteSomeParam'], 'someObject' => $d->getSomeObject(), ]); $concrete->someMethod($params['someMethodParam']); $concrete->someProperty = 321; return $concrete; });
azexsoft/di 适用场景与选型建议
azexsoft/di 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 56 次下载、GitHub Stars 达 0, 最近一次更新时间为 2020 年 09 月 04 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「container」 「dependency」 「di」 「injection」 「Autowiring」 「injector」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 azexsoft/di 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 azexsoft/di 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 azexsoft/di 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
A fast and intuitive dependency injection container.
Dependency injection container for the Monolith framework.
The PSR-11 container bridges
Http Microframework for Hack
PHP Dependency Injection Container
统计信息
- 总下载量: 56
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 27
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2020-09-04