Adición de interfaces nuevas

Pueden pasarse nuevos tipos de objetos al constructor de un componente lógico registrándolos con el punto de extensión org.eclipse.core.component.types. En este momento, es preciso presentar el término componente. Un componente es cualquier clase de objeto creado a partir de un punto de extensión inyectando argumentos en su constructor. Los componentes de estilo nuevo son una clase de componente, pero existen también otros tipos de componentes.

El ejemplo siguiente muestra una extensión de tipos de ejemplo. Este ejemplo especifica que la interfaz INameable debe estar disponible en el sitio de un componente.

<extension
      point="org.eclipse.core.component.types">
   <component
         initializer="org.eclipse.ui.part.SiteInitializer"
         interface="org.eclipse.ui.part.services.INameable"
         implementation="org.eclipse.ui.internal.part.services.NullNameableService"
         singleton="true"
   />
</extension>

El atributo initializer indica dónde se utilizará la interfaz. Por ejemplo, la serie "org.eclipse.ui.part.SiteInitializer" quiere decir que la interfaz se utiliza en el sitio de un componente. También podría haberse utilizado "org.eclipse.ui.part.PartInitializer" si la interfaz estuviera pensada para que los propios componentes la implementaran.

El atributo interface es el nombre de la interfaz. Debe coincidir exactamente con el tipo que el componente recibirá en su constructor. Si se crea una extensión que proporcione series y un componente solicita un objeto, no utilizará esta extensión aunque se trate de un tipo compatible.

El atributo implementation identifica la implementación por omisión de la interfaz. Apunta a una clase de componentes que implementa la interfaz o un ComponentFactory que puede crearlos; para obtener información adicional, consulte la sección referida a ComponentFactory. Esta implementación se utiliza para satisfacer una dependencia siempre que un componente solicita esta interfaz y ésta no se encuentra en su contexto padre. Todas las interfaces deben proporcionar una implementación por omisión. Esto quiere decir que un componente escrito correctamente funcionará siempre en un ámbito determinado, independientemente de cuántas dependencias proporcione su contexto padre. La implementación no puede alterar temporalmente ni ampliar el atributo de interfaz implementando interfaces adicionales. Otros componentes pueden depender de este componente a través de su interfaz registrada, pero no pueden depender directamente de la clase de implementación.

El atributo singleton indica si la implementación por omisión es monoinstancia. Si el valor es true, se creará una sola instancia que se compartirá entre todos los demás componentes que la necesiten. Si el valor es false, se creará una instancia nueva para cada contenedor que la necesite. Por ejemplo, en el caso de los componentes, singleton=:"false" quiere decir que se creará una instancia para cada componente.