Comunicação entre recipiente e componentes

Um recipiente é um nexo para comunicação entre o aplicativo cliente e componentes que contém.Um aplicativo pode obter referências a componentes no recipiente sem conhecer o nome ou identidade real do componente.O componente também pode interagir com o aplicativo cliente através do recipiente de diversas maneiras.

O objeto contêiner expõe os componentes que contém a sua propriedade de Components .Esta propriedade é uma propriedade indexada que retorna um objeto de referência de IComponent .Os componentes são controlados na primeira em, na primeira - out base, e são acessíveis através do í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ê estiver fazendo referência a, você também pode obter a referência através do recipiente usando esse nome, conforme mostrado no exemplo o seguir:

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

Veja a propriedade de Components retorna uma referência de IComponent , e não permitirá para acessar os métodos e propriedades do componente que não são implementadas pela interface.

O componente se comunica com o recipiente primeiro através da propriedade de Site .Com Site, o componente pode obter uma referência para a interface de IContainer implementada pelo recipiente, 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 pela propriedade de Container .Isso pode ser considerado como um atalho: A referência é fornecida ainda através do objeto de ISite , mas não explicitamente em esse caso.

O componente também pode obter o contêiner (se são fornecidos) chamando 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 através de GetService, deve ser implementado em uma classe herdada do contêiner.O método de GetService da classe de Container deve ser substituído e código para fornecer um objeto de serviço implementado.

Consulte também

Tarefas

Como: crie contêiner componentes

Como: estender contêiner componentes

Conceitos

Contêiner, sites, e componentes