norvica/container

实用的PHP依赖注入容器。

v0.4.1 2024-06-01 11:43 UTC

This package is auto-updated.

Last update: 2024-09-06 16:49:00 UTC


README

Latest Stable Version Checks

简单而强大的PHP依赖注入容器,符合PSR-11规范,易于配置。

阅读文档

重要

此库正在积极开发中,尚未达到版本1.0。虽然某些功能或实现细节可能在未来的更新中发生变化,但核心功能遵循PSR-11容器接口,确保与其他PSR-11兼容组件的兼容性。

为什么选择这个容器?

简单性赋予可维护性

复杂的工具很快就会成为一种负担。我们相信简单性的力量可以使您的代码更容易理解、调试和随时间适应。此库避免不必要的复杂性,专注于提供真实价值的功能,同时不牺牲性能。

主要功能

  • 快速:针对生产环境中的性能进行了优化。
  • 框架无关:与任何使用PSR-11容器接口的项目无缝集成。
  • 显式优于隐式:优先考虑可读性强的显式配置,而不是隐藏的“魔法”,使您的代码更容易维护。
  • 轻量级:最小化占用空间,使您的项目保持精简高效。
  • 编译支持:通过内置编译进一步优化性能,包括匿名函数。
  • 自动装配:使用自动依赖解析简化您的代码,即使在编译后也可以使用。
  • 零配置选项:使用合理的默认值快速开始,无需配置。
  • 循环依赖保护:自动检测并帮助您解决循环依赖。

不包括的内容(以及原因)

此库故意省略某些功能,以优先考虑简单性、可维护性和性能。

  • 没有属性注入:我们鼓励使用构造函数或方法注入,以获得更好的清晰性和可测试性。如果需要动态配置,请考虑在容器定义中使用匿名函数。
  • 没有代理/延迟加载:这些机制通常掩盖了潜在的设计问题。相反,专注于优化代码结构和依赖关系以获得更好的性能。
  • 没有“原型”范围:此库作为服务容器使用,确保对象实例的一致性。如果您需要工厂模式,请创建一个工厂并将其注册到容器中。
  • 没有通配符定义:通配符定义引入了隐式行为,随着项目的增长可能难以管理。我们优先考虑显式、可读的配置。
  • 没有目录加载:与通配符定义类似,目录加载可能导致隐式行为和潜在冲突。
  • 没有#[Service]属性:在配置中显式定义服务使它们更容易定位、理解和维护。此方法还提高了性能,因为不需要扫描目录以查找服务属性。
  • 没有表达式语言:闭包提供了足够的灵活性,适用于大多数用例,而不引入不必要的复杂性。
  • 没有标记:标记可能掩盖依赖关系。相反,专注于定义服务之间的显式关系。

这些选择是为了使库保持精简、专注且易于理解。通过避免可能引入不必要的复杂性或模糊性的功能,我们旨在使您能够编写更干净、更易于维护的代码。

安装

composer require norvica/container

阅读文档