Kommunikation zwischen Containern und Komponenten

Aktualisiert: November 2007

Ein Container ist das Verbindungsstück, das die Kommunikation zwischen der Clientanwendung und der enthaltenen Komponente ermöglicht. Eine Anwendung kann Verweise auf Komponenten im Container abrufen, ohne den tatsächlichen Namen oder die Identität der Komponente zu kennen. Es gibt verschiedene Möglichkeiten, wie die Komponente über den Container mit der Clientanwendung interagieren kann.

Das Containerobjekt stellt die enthaltenen Komponenten über seine Components-Eigenschaft bereit. Es handelt sich dabei um eine indizierte Eigenschaft, die ein IComponent-Verweisobjekt zurückgibt. Komponenten werden nach dem First-in/First-out-Prinzip überwacht. Der Zugriff erfolgt mit folgender Syntax über den Index:

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

Komponenten können einem Container mit oder ohne Namen hinzugefügt werden. Wenn Sie den Namen der betreffenden Komponente kennen, können Sie den Verweis auch unter Angabe des Namens über den Container erhalten. Beispiel:

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

Beachten Sie, dass die Components-Eigenschaft einen IComponent-Verweis zurückgibt. Sie können damit nicht auf Methoden und Eigenschaften der Komponente zugreifen, die nicht von dieser Schnittstelle implementiert wurden.

Die Komponente kommuniziert überwiegend über die Site-Eigenschaft mit dem Container. Über Site kann die Komponente einen Verweis auf die IContainer-Schnittstelle abrufen, die vom Container implementiert wird. Beispiel:

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

Derselbe Verweis wird auch von der Container-Eigenschaft zurückgegeben. Dies kann als Verknüpfung betrachtet werden: Der Verweis wird weiterhin über das ISite-Objekt bereitgestellt, in diesem Fall jedoch nicht explizit.

Die Komponente kann auch Dienste vom Container erhalten (sofern bereitgestellt), indem die IServiceProvider.GetService-Methode aufgerufen wird. Diese Methode gibt ein Objekt des angegebenen Typs aus. Beispiel:

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;

Damit Sie ein Objekt über GetService abrufen können, muss es in einer geerbten Containerklasse implementiert werden. Die GetService-Methode der Container-Klasse sollte überschrieben und Code implementiert werden, aus dem das Dienstobjekt hervorgeht.

Siehe auch

Aufgaben

Gewusst wie: Erstellen von Komponentencontainern

Gewusst wie: Erweitern von Komponentencontainern

Konzepte

Container, Sites und Komponenten