Incluindo Novas Interfaces

Novos tipos de objetos podem ser transmitidos em um construtor de parte registrando-os com o ponto de extensão org.eclipse.core.component.types. Neste ponto, devemos introduzir o termo componente. Um componente é qualquer tipo de objeto criado em um ponto de extensão injetando argumentos em seu construtor. As partes com novo estilo são um tipo de componente, mas também existem outros tipos de componentes.

O exemplo a seguir mostra uma extensão de tipos de amostras. Esse exemplo especifica se a interface INameable deve estar disponível em um site de parte.

<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>

O atributo initializer indica onde a interface será utilizada. Por exemplo, a cadeia "org.eclipse.ui.part.SiteInitializer" indica que a interface é utilizada em um site de parte. Também poderíamos ter utilizado o "org.eclipse.ui.part.PartInitializer" se a interface tivesse como objetivo que as próprias partes implementassem.

O atributo interface é o nome da interface. Ele deve corresponder exatamente ao tipo que o componente receberá em seu construtor. Se criarmos uma extensão que forneça Cadeias e um componente pedir um Objeto, ele não utilizará nossa extensão, embora ela seja de um tipo compatível.

O atributo implementation identifica a implementação padrão da interface. Ele aponta para uma classe de componentes que implementa a interface ou para um ComponentFactory que pode criá-las. Para obter informações adicionais, consulte a seção ComponentFactory. Essa implementação é utilizada para satisfazer uma dependência sempre que um componente pedir essa interface e ela não puder ser localizada em seu contexto pai. Todas as interfaces devem fornecer uma implementação padrão. Isto significa que um componente gravado corretamente sempre funcionará em um escopo fornecido, independentemente de quantas dependências são fornecidas pelo contexto pai. A implementação não pode substituir ou estender o atributo interface implementando interfaces adicionais. Outros componentes podem depender desse componente por meio de sua interface registrada, mas não podem depender diretamente da classe de implementação.

O atributo singleton indica se a implementação padrão é um singleton. Se verdadeiro, uma instância única será criada e compartilhada entre todos os outros componentes que precisam dela. Se falso, uma nova instância será criada para cada contêiner que precisa dela. Por exemplo, no caso de partes, singleton=:"false" significa que uma instância será criada para cada parte.