- TODO
-
- - Make compiler able to be definition-aware for purposes of derived class
- information. Basically, allow attaching other Definition objects to a compiler
- which it will then consult during compile() in order to flesh out dependency
- details. Use case: a concrete DbTable object in a user library. In this case,
- currently compiling against that object will provide no supertypes; having the
- ability to attach a previously created definition would allow the compiler to
- check against those and provide information as it locates it.
-
- - Integrate the EventManager into the Compiler and Code\Scanner in order to
- allow attaching listeners to interesting events. Use cases include logging and
- debugging during definition compilation.
-
- - Ability to provide both class properties and method-specific parameters via
- configuration (which solves disambiguation when multiple methods specify the
- same parameter names)
-
- Proposed solution:
-
- array(
- 'properties' => array(
- 'Zend\Foo\Bar' => array(
- 'public' => true,
- 'methods' => array(
- '__construct' => array(
- 'params' => array(
- 'foo' => 'bar',
- ),
- 'class' => 'Some\Default\Class'
- ),
- 'setConfig' => array(
- 'params' => array(
- 'bar' => 'baz',
- ),
- ),
- ),
- ),
- ),
- )
-
- - Ability to pass configuration to a generated ServiceLocator
-
- - Skip optional arguments if not passed in configuration or part of definition
- (current behavior is to raise an exception if *any* arguments are missing)
-
- - Scoped Containers:
-
- Described here:
- http://picocontainer.org/scopes.html
-
- This is something that should be explored when we start using these containers
- with ServiceLocators inside an application. While part of this has to do with
- garbage collection in Java (something we need not worry with in PHP since there
- is no persistent in-memory objects), the interesting use case would be having a
- container cloned from another container that has more or less (a subset) of the
- definitions available to the Container's newInstance() and get() facilities.
-
- - Better Strategy Management
-
- Currently, the strategies for determining dependencies is hard coded into the
- various definitions. Ideally, we'd be able to have configurable strategies
- that the definitions can then utilize to do their job:
-
- http://picocontainer.org/injection.html
-
- We currently support constructor injection and setter injection (methods prefixed
- by set[A-Z])
-
- - Annotation Parsing
-
- Ideally, at some point, Zend\Code\Scanner will support Annotation parsing. When
- this is possible, we'd like to be able to use @inject similar to
- http://picocontainer.org/annotated-method-injection.html
-
- - SuperType Resolution
-
- (partially done inside resolveMethodParameters with is_subtype_of())
-
- If a class claims it needs a dependency of not an object, but a particular
- interface, the ability to find an object that suits that dependency, either
- through a concept called 'Preferred Objects' or via a 'Property'. The
- following should be supported:
-
- The compiler also needs to be aware of other definitions when looking up SuperTypes
-
- $definition = new AggregateDefinition();
- $definition->addDefinition('Zend\Controller\DiDefinition');
-
- $compiler = new Compiler()
- $compiler->addDefinition($definition);
- $compiler->addCodeScanner(__DIR__ . 'My/Blog');
- $array = $compiler->compile()
- $definition->addDefinition(new ArrayDefinition($array));
-
- - Performance & Benchmarking
-
- Zend\Code\Scanner- check memory usage, perhaps use gc_collect_cycles() to free memory,
- we'll have to do this on large scan bases.
-
- Benchmark compiler: reflection vs. code scanner
-
-
# |
Change |
User |
Description |
Committed |
|
#1
|
18334 |
Liz Lam |
initial add of jambox |
9 years ago
|
|