Komunikace mezi kontejnery a komponentami
Kontejner je nexu pro komunikaci mezi klientskou aplikací a komponent, které obsahuje.Aplikace může získat odkazy na komponenty v kontejneru bez znalosti skutečné jméno nebo identitě součásti.Komponenty mohou také spolupracovat s aplikací klienta prostřednictvím kontejneru v mnoha různými způsoby.
Objekt kontejneru poskytuje součásti obsahuje přes jeho Components vlastnost.Tato vlastnost je indexovaná vlastnost, která vrací IComponent odkaz na objekt.Součásti jsou sledovány na základě budou ve a jsou přístupné pomocí indexu pomocí následující syntaxe:
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];
Součásti může přidat do kontejneru s nebo bez názvu.Pokud znáte název komponenty, které se týká, může dojít také odkaz prostřednictvím tohoto názvu kontejneru jak ukazuje následující příklad:
xComponent = MyContainer.Components("myComponent")
xComponent = MyContainer.Components["myComponent"];
Všimněte si, že Components vrátí vlastnost IComponent odkaz, nebude možné přístupové metody a vlastnosti součásti, které nejsou implementovány pomocí tohoto rozhraní.
Součást komunikuje s kontejnerem především prostřednictvím jeho Site vlastnost.Prostřednictvím Site, komponenty lze získat odkaz na IContainer rozhraní implementované v kontejneru, jak je ukázáno níže:
Dim myComponent As New Component()
Dim myIContainer as IContainer
myIContainer = myComponent.Site.Container
Component myComponent = new Component();
IContainer myIContainer;
myIContainer = myComponent.Site.Container;
Také vrácené stejný odkaz Container vlastnost.To lze představit jako zástupce: odkaz je i nadále poskytována prostřednictvím ISite objektu, ale v tomto případě není explicitně.
Komponenty lze také získat služby z kontejneru (pokud jsou dodávány) voláním Metody IServiceProvider.GetService.Tato metoda vrátí objekt zadaného typu, jak je ukázáno níže:
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;
Obdržet prostřednictvím objektu GetService, musí být provedeny ve třídě zděděné kontejneru.GetService Metodu Container třída by měla být přepsána a implementován kód objektu služby poskytovat.
Viz také
Úkoly
Postupy: Vytváření kontejnerů komponent
Postupy: Rozšíření kontejnerů komponent