Partager via


Communication entre les conteneurs et leurs composants

Un conteneur est un canal de communication entre l'application cliente et les composants qu'il renferme. Une application peut obtenir des références aux composants du conteneur sans connaître leur nom ou leur identité exactes. Le composant peut également interagir de diverses façons avec l'application cliente par le biais du conteneur.

L'objet conteneur expose les composants qu'il renferme par le biais de sa propriété Components. Cette propriété indexée retourne un objet référence IComponent. Les composants sont suivis selon la règle du « premier entré premier sorti » et sont accessibles par le biais de l'index au moyen de la syntaxe suivante :

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

Les composants peuvent être ajoutés au conteneur avec ou sans nom. Si vous connaissez le nom du composant auquel vous faites référence, vous pouvez également obtenir la référence par le biais du conteneur en vous servant de ce nom, comme le montre l'exemple suivant :

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

Notez que la propriété Components retourne une référence IComponent et ne vous permet pas d'accéder aux méthodes et propriétés du composant qui ne sont pas implémentées par cette interface.

Le composant communique avec le conteneur en premier lieu par le biais de sa propriété Site. Par l'intermédiaire de la propriété Site, le composant peut obtenir une référence à l'interface IContainer implémentée par le conteneur, comme le montre l'exemple suivant :

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

La même référence est également retournée par la propriété Container. Il s'agit donc d'une sorte de raccourci : la référence est toujours fournie par le biais de l'objet ISite, mais pas explicitement dans ce cas.

Le composant peut également obtenir des services auprès du conteneur (s'ils sont fournis) en appelant la GetService. Cette méthode retourne un objet du type spécifié, comme le montre l'exemple suivant :

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;

Pour qu'un objet soit obtenu à l'aide de GetService, il doit être implémenté dans une classe conteneur héritée. La méthode GetService de la classe Container doit être substituée et le code de fourniture du service implémenté.

Voir aussi

Tâches

Comment : créer des conteneurs de composants

Comment : étendre des conteneurs de composants

Concepts

Conteneurs, sites et composants