Udostępnij za pośrednictwem


Komunikacja pomiędzy kontenerami i składnikami

Kontener jest węzła dla komunikacji między aplikacją klienta i składników, które zawiera.Aplikacja może uzyskać odwołania do składników w kontenerze bez znajomości rzeczywistą nazwę lub tożsamości składnika.Składnik również może współpracować z aplikacji klienckiej przez kontener na różne sposoby.

Obiekt kontenera udostępnia składników zawiera poprzez jego Components właściwości.Ta właściwość jest indeksowane właściwość, która zwraca IComponent odniesienia obiektu.Składniki są śledzone na podstawie first-in, first-out i są dostępne za pośrednictwem indeksu, używając następującej składni:

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

Składniki mogą być dodane do pojemnika z lub bez nazwy.Jeśli znasz nazwę składnika, który odnosi się do możesz również uzyskać odniesienie do kontenera przy użyciu tej nazwy, jak pokazano w następującym przykładzie:

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

Należy zauważyć, że Components zwraca wartość właściwości IComponent odniesienie i nie pozwala na dostęp, metod i właściwości składnika, które nie są implementowane przez ten interfejs.

Składnik, który komunikuje się z kontenera, głównie poprzez jego Site właściwości.Poprzez Site, składnika można uzyskać odniesienie do IContainer interfejsu zaimplementowanego przez kontener, jak pokazano poniżej:

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

Tym samym odniesienia jest także zwracany przez Container właściwości.Ten można traktować jako skrót: odwołanie jest nadal zapewniana przez ISite obiektu, ale nie są wyraźnie w tym przypadku.

Składnik można także uzyskać usług z kontenera (jeśli są one dostarczane), wywołując Metoda IServiceProvider.GetService.Ta metoda zwraca obiekt określonego typu, jak pokazano poniżej:

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;

Aby otrzymać obiektu poprzez GetService, musi być zaimplementowana w klasie dziedziczone kontenera.GetService Metoda Container powinny zostać zastąpione klasy i wdrożone kodu do dostarczania obiektu usługi.

Zobacz też

Zadania

Porady: tworzenie kontenerów składników

Porady: rozszerzanie kontenerów składników

Koncepcje

Kontenery, witryny i składniki