| Under Construction This proposal is under construction and is not ready for review. |
<ac:macro ac:name="unmigrated-inline-wiki-markup"><ac:plain-text-body><![CDATA[
Zend_DI is a dependency injector component, similar in concept to PicoContainer, but smaller and easier to use. The architecture of the Zend_DI component is based on the following concepts:
Zend Framework: Zend_DI Component Proposal
Proposed Component Name
Zend_DI
Developer Notes
http://framework.zend.com/wiki/display/ZFDEV/Zend_DI
Proposers
My E-mail Address
Revision
0.1 - 21 November 2007: Initial Proposal. (wiki revision: 13)
Table of Contents
1. Overview
2. References
3. Component Requirements, Constraints, and Acceptance Criteria
- This component will use ReflectionClass.
- This component will not use external configuration files, such as XML files.
4. Dependencies on Other Framework Components
- Zend_Exception
- Zend_Config (optional)
5. Theory of Operation
The purpose of Zend_DI is to provide and easier way to test atomic units of code in isolation, and to mock dependencies which one component may refer to. Zend_DI minimizes coupling between groups of classes, makes unit testing much simpler, and provides an easy way to re-configure a library to use custom implementations of components.
Zend_DI provides generic factory classes that instantiate instances of classes. These instances are then configured by the container, allowing construction logic to be reused on a broader level. Typically, responsibility for object management is taken over by whatever container is being used to manage those objects.
The component handles injections via the constructor or setters methods. In addition, Zend_DI allows the user to map out specifications for components and their dependencies in a configuration file and generate the objects based on that specification. As opposed to some Java DI Containers, Zend_DI does not depend on external XML configuration files, it uses arrays to store configuration options. However, the component could accept instances of the Zend_Config class and convert objects or XML files into arrays. The configuration array can be set using the setConfig() method.
6. Milestones / Tasks
- Milestone 1: Proposal finished
- Milestone 2: Proposal accepted
- Milestone 3: Working release
- Milestone 4: Unit tests
- Milestone 5: Documentation
- Milestone 6: Future enhancements
7. Class Index
- Zend_DI_Container
- Zend_DI_Exception
- Zend_DI_Container_Manager
- Zend_DI_Container_Exception
- Zend_DI_Container_Registry
- Zend_DI_Container_Registry_Interface
- Zend_DI_Component_Factory
- Zend_DI_Component_Exception
8. Use Cases
- Foo.php
Dependencies can be either "Static" or "Dynamic". Dynamic dependencies can be set on the fly, while Static dependencies have to be specified in the configuration array.
- DynamicInjection.php
- StaticInjection.php
9. Class Skeletons
- Zend_DI_Container