Comunicação entre os contêineres e componentes

Um recipiente é um nexus para comunicação entre o aplicativo cliente e os componentes que ele contém. Um aplicativo pode obter referências a componentes dentro do contêiner, sem saber o nome real ou a identidade do componente. O componente também pode interagir com o aplicativo de cliente por meio do contêiner em uma variedade de formas.

O objeto de recipiente expõe os componentes que ele contém, por meio de sua Components propriedade. Esta propriedade é uma propriedade indexada que retorna um IComponent referência de objeto. Componentes são controladas em uma base first in, First-out e são acessíveis através de índice usando a seguinte sintaxe:

Imports System.ComponentModel
Dim MyContainer As Container
Dim xComponent as IComponent
xComponent = MyContainer.Components(0)
using System.ComponentModel;
Container MyContainer = new Container();
IComponent xComponent;
xComponent = MyContainer.Components[0];

Componentes podem ser adicionados a um recipiente com ou sem um nome. Se você souber o nome do componente que você está se referindo, você também pode obter a referência através do contêiner usando esse nome, como mostrado no exemplo a seguir:

xComponent = MyContainer.Components("myComponent")
xComponent = MyContainer.Components["myComponent"];

Observe que o Components propriedade retorna um IComponent de referência e não permitirá que você acesse os métodos e propriedades do componente que não são implementados por interface.

O componente se comunica com o contêiner principalmente por meio de Site propriedade. Por meio de Site, o componente pode obter uma referência para o IContainer interface implementada pelo contêiner, como mostrado abaixo:

Dim myComponent As New Component()
Dim myIContainer as IContainer
myIContainer = myComponent.Site.Container
Component myComponent = new Component();
IContainer myIContainer;
myIContainer = myComponent.Site.Container;

A mesma referência também é retornada pelo Container propriedade. Isso pode ser considerado como um atalho: A referência ainda é fornecida através do ISite objeto, mas não explicitamente no caso.

O componente também pode obter serviços do contêiner (se eles são fornecidos) chamando O método de IServiceProvider.GetService. Esse método retorna um objeto do tipo especificado, como mostrado abaixo:

Dim myComponent As Component
Dim myWidget As Widget
Dim serviceObject As Object
' This returns an object of type Widget that is supplied by the container.
serviceObject = myComponent.Site.GetService(GetType(Widget))
myWidget = CType(serviceObject, Widget)
Component myComponent = new Component();
Widget myWidget;
object serviceObject;
// This returns an object of type Widget that is supplied by the container.
serviceObject = myComponent.Site.GetService(System.Type.GetType("CommunicateCS.Widget"));
myWidget = (Widget)serviceObject;

Para receber um objeto por meio de GetService, ele deve ser implementado em uma classe de contêiner herdadas. O GetService método de Container classe deve ser substituída e o código para fornecer o objeto de serviço implementado.

Consulte também

Tarefas

Como: Criar recipientes de componente

Como: Estender os recipientes de componente

Conceitos

Recipientes, Sites e componentes