--- /dev/null
+Component infrastructure
+* support simple component
+ - requires through constructor
+ - provides through getters
+* support pre-instantiated components
+* optional start and stop methods
+* directly implementing the Component interface
+* explicit wiring must be possible
+* giving names to a component must be optional
+* support for cached components and non-cached components.
+
+
+- rename System -> Component
+- rename CompositeComponent -> Container
+- qualified name zetten in de start methode
+- testen op multiple start methodes.
+- geneste service registry maken, testen dat een component alleen maar
+ die componenten in de registry ziet die hij daadwerkelijk mag gebruiken
+- validate() in start() methode aanroepen.
+- validate() moet public zijn
+- Container abstraheren in API
+ addComponent(Component) methode toevoegen voor component
+ addComponent(name, component) methode toevoegen voor component.
+
+- Toevoegen van Constraint interface
+ Constraint.isAllowed(provider, ProvidedInterface, client, RequiredInterface)
+ Eenvoudige constraint implementeren voor expliciete binding van provided
+ en required interfaces.
+
+ CompositeConstraint implementeren.
+
+ CompositeConstraint checken voor elke potentiele match.
+
+- Annotaties definieren
+
+ @Component
+ class MyComponent {
+
+ public MyComponent(Def aArg, Ghi aArg2) {
+ }
+
+ @Provided(name = "name")
+ public Xyz getXyz();
+
+ @Start
+ public void myStart(); // Unlike the component
+}
+
+- constraint definieren om constructor te selecteren.
+
+ // Select the constructor or setter to use.
+ ArgumentConstraints(Class[] argTypes)
+ // indicate which provided interface from what other component must be
+ // used for the i-th parameter.
+ constraint.require(int i, new ProvidedConstraint(component, intf));
+ // indicate the value to substitute for the i-th parameter.
+ constraint.setValue(int i, Object aValue);
+
+- Algemene classes maken die de constructor, start method, en
+ methodes identificeren om de component als Component te benaderen.
+ in een object, samen met een wrapper die deze info gebruikt om het
+ object als Component te exportern.
+ Er moet ook een wrapper zijn voor reeds geinstantieerde objecten.
+
+- wrapper maken die geannoteerde classes interpreteert en via de eerdere
+ wrapper het object ontsluiten als component.
+ Zowel geinstantieerde objecten als classes ondersteunen.
+
+- constructor toevoegen aan de container voor
+ addComponent(Class) // use constructor with the most arguments
+ addComponent(Class, ArgumentConstraints) // use explicit constructor
+ addRunningComponent(Object) // running component with annotations or
+ // subclass of Component
+
+ addComponent(Object, ComponentAdapterInfo) // running component with
+ // info on how to adapt it to a component.
+
+