norvica / container
实用的PHP依赖注入容器。
v0.4.1
2024-06-01 11:43 UTC
Requires
- php: >=8.2
- nikic/php-parser: ^5.0
- psr/container: ^2.0
Requires (Dev)
- phpunit/phpunit: ^11.1
This package is auto-updated.
Last update: 2024-09-06 16:49:00 UTC
README
简单而强大的PHP依赖注入容器,符合PSR-11规范,易于配置。
阅读文档。
重要
此库正在积极开发中,尚未达到版本1.0
。虽然某些功能或实现细节可能在未来的更新中发生变化,但核心功能遵循PSR-11容器接口,确保与其他PSR-11兼容组件的兼容性。
为什么选择这个容器?
简单性赋予可维护性
复杂的工具很快就会成为一种负担。我们相信简单性的力量可以使您的代码更容易理解、调试和随时间适应。此库避免不必要的复杂性,专注于提供真实价值的功能,同时不牺牲性能。
主要功能
- 快速:针对生产环境中的性能进行了优化。
- 框架无关:与任何使用PSR-11容器接口的项目无缝集成。
- 显式优于隐式:优先考虑可读性强的显式配置,而不是隐藏的“魔法”,使您的代码更容易维护。
- 轻量级:最小化占用空间,使您的项目保持精简高效。
- 编译支持:通过内置编译进一步优化性能,包括匿名函数。
- 自动装配:使用自动依赖解析简化您的代码,即使在编译后也可以使用。
- 零配置选项:使用合理的默认值快速开始,无需配置。
- 循环依赖保护:自动检测并帮助您解决循环依赖。
不包括的内容(以及原因)
此库故意省略某些功能,以优先考虑简单性、可维护性和性能。
- 没有属性注入:我们鼓励使用构造函数或方法注入,以获得更好的清晰性和可测试性。如果需要动态配置,请考虑在容器定义中使用匿名函数。
- 没有代理/延迟加载:这些机制通常掩盖了潜在的设计问题。相反,专注于优化代码结构和依赖关系以获得更好的性能。
- 没有“原型”范围:此库作为服务容器使用,确保对象实例的一致性。如果您需要工厂模式,请创建一个工厂并将其注册到容器中。
- 没有通配符定义:通配符定义引入了隐式行为,随着项目的增长可能难以管理。我们优先考虑显式、可读的配置。
- 没有目录加载:与通配符定义类似,目录加载可能导致隐式行为和潜在冲突。
- 没有
#[Service]
属性:在配置中显式定义服务使它们更容易定位、理解和维护。此方法还提高了性能,因为不需要扫描目录以查找服务属性。 - 没有表达式语言:闭包提供了足够的灵活性,适用于大多数用例,而不引入不必要的复杂性。
- 没有标记:标记可能掩盖依赖关系。相反,专注于定义服务之间的显式关系。
这些选择是为了使库保持精简、专注且易于理解。通过避免可能引入不必要的复杂性或模糊性的功能,我们旨在使您能够编写更干净、更易于维护的代码。
安装
composer require norvica/container
阅读文档。