## Initializers

The main purpose of an initializer is to identify a scope. However, it is more than just a unique identifier. It points to the Java class that supplies initialization information to the scope. In order to create an object from the org.eclipse.core.component.types extension point, Eclipse must manually construct an initializer of the appropriate type. This allows Eclipse to pass required context to components from outside the component framework. Any component is allowed to depend on the initializer for its scope, it to access this context. Currently most of the initializers provided by the workbench have an empty public interface, so most clients would not want to do this yet.
Inheritance is taken into consideration between initializer types. Registering a component type on an initializer's base class will also affect the initializer and all of its subclasses. Initializers cannot be interfaces, so only single inheritance is possible. For example, an interface registered on org.eclipse.core.component.ExtensionInitializer would be visible both from a part and from its site since org.eclipse.core.component.ExtensionInitializer is a base class for both the part and site initializers.
The workbench supplies the following initializer types:

Initializer | Base class | Used for
org.eclipse.core.component.ExtensionInitializer | none | Dependencies used by any component created from an extension point.
org.eclipse.ui.part.PartInitializer | org.eclipse.core.component.ExtensionInitializer | Interfaces that can be implemented by a part.
org.eclipse.ui.part.SiteInitializer | org.eclipse.core.component.ExtensionInitializer | Components available from a site (such as things a part can take in its constructor).
org.eclipse.ui.part.SiteMultiplexerInitializer | org.eclipse.ui.part.SiteInitializer | Dependencies that only apply to site inside a multiplexer (used to override the default component implementation provided by a site).