Sdílet prostřednictvím


Kontejnery, weby a komponenty

Kontejner je speciální kolekci objekt, který obsahuje logické omezení pro jednu nebo více součástí.Kontejnery správu interakce komponent s navzájem i s externí aplikací prostředí poskytnutím implementace ISite rozhraní, přes které interakce může probíhat.Kontejner umožňuje sledování komponent na základě budou ve a umožňuje součásti odkazovat podle indexu.Kontejner poskytuje také prostředky společného vyřazení komponent již máte jejich potřebu.

Uzavření označuje logické omezení není vizuální nebo fyzického uzavření.Kontejner zapouzdří jednu nebo více součástí a poskytuje souhrnný, přes která mohou klienti spolupracují.Kontejner umožňuje přidat nebo odebrat součásti pomocí následující syntaxe:

Imports System.ComponentModel
Dim myComponent As New Component()
Dim myContainer As New Container()
myContainer.Add(myComponent)
myContainer.Remove(myComponent)
using System.ComponentModel;
Component myComponent = new Component();
Container myContainer = new Container();
myContainer.Add(myComponent);
myContainer.Remove(myComponent);

Komponenta kontejner bude buď být instance Container třídy nebo implementace IContainer rozhraní.Containerje referenční implementace tohoto rozhraní.

Název součásti

Můžete také zadat název komponenty v kontejneru.Tento název musí být jedinečný v kontejneru a je určena pomocí Add metoda.

Dim myComponent As New Component()
Dim myContainer As New Container()
MyContainer.Add(myComponent, "ThisComponent")
Component myComponent = new Component();
Container myContainer = new Container();
myContainer.Add(myComponent, "ThisComponent");

Správa prostředků a rozšiřování kontejnery

Kontejnery poskytovat Centrální správa prostředků přidružených komponent.Při Dispose je volána metoda, kontejner automaticky volá Dispose metoda všechny obsažené součásti a tím zajistit prostředky budou uvolněny ihned.

Kontejnery jsou rozšiřitelné.Můžete vytvořit vlastní třídy, která dědí z Container , zahrnuje vlastní funkce.Například můžete vytvořit kontejner, vynutit pravidla, která řídí, které součásti může být přidán do kontejneru, jak je znázorněno v následujícím příkladu:

Public Class MyContainer
   Inherits Container
   Public Overloads Overrides Sub Add(ByVal component As IComponent)
      ' Checks to see if the component is allowed to join this container.
      If TypeOf component Is Widget Then
         ' Calls the Add method of the base class, and adds the component.
         MyBase.Add(component)
      Else
         ' If the component is not allowed, an exception is thrown.
         Throw New NonWidgetException()
      End If
   End Sub
End Class
class MyContainer : Container
{
   public override void Add(IComponent component)
   {
      // Checks to see if the component is allowed to join this container.
      if (component is Widget)
      {
         base.Add(component);
      }
      else
      {
         throw new NonWidgetException();
      }
   }
}

V předchozím příkladu vytvoří nové třídy kontejner, který je schopen uplatňovat pravidla o tom, které součásti jsou schopni připojit ke kontejneru.Pokud není součástí zadané třídy (v tomto případě pomůcka), je vyvolání výjimky.

Při přidání komponenty do kontejneru kontejneru vytvoří web pro něj.Toto je implementace ISite rozhraní, které je vystaven komponenty Site vlastnost.Komunikační součást s jeho kontejneru hostitele se dosahuje prostřednictvím komponenty Site vlastnost.Tato vlastnost představuje logické web součásti a hostitelem je kontejner.Komponenta, která není obsažena v kontejneru vrátí null odkaz pro jeho Site vlastnost.Site Vlastnost umožňuje získat prostřednictvím rozhraní kontejneru odkaz ISite.Container vlastnost nebo odkaz na hostitelském prostřednictvím rozhraní komponenty Component vlastnost.

Dim myComponent As New Component
Dim myContainer As New Container
myContainer.Add(myComponent)
Dim myIComponent as IComponent
Dim myIContainer as IContainer
myIComponent = myComponent.Site.Component
myIContainer = myComponent.Site.Container
' These two messages display True.
MessageBox.Show("Are the components equal? " & _
   myComponent.Equals(myIComponent).ToString)
MessageBox.Show("Are the containers equal? " & _
   myContainer.Equals(myIContainer).ToString)
Component myComponent = new Component();
Container myContainer = new Container();
myContainer.Add(myComponent);
IComponent myIComponent;
IContainer myIContainer;
myIComponent = myComponent.Site.Component;
myIContainer = myComponent.Site.Container;
MessageBox.Show("Are the components equal? " + 
   myComponent.Equals(myIComponent).ToString());
MessageBox.Show("Are the containers equal? " + 
   myContainer.Equals(myIContainer).ToString());

Obě tyto vlastnosti vrátit pouze rozhraní přidružené těchto objektů není odkaz na objekty sami.Všimněte si, že má také komponentu Container vlastnost, která vrátí stejné rozhraní jako Container.Tato vlastnost poskytuje prostřednictvím webu a si lze představit jako zástupce.

Pokud vaše pomocí komponenty přiřaďte název Add metodou, název lze získat prostřednictvím Name vlastnost.Pokud kontejneru objektu služby s ním spojené, odkaz na objekt lze získat prostřednictvím součásti GetService metoda.

Přístup k službám

Přístup různých služeb prostřednictvím GetService metoda.Tyto služby poskytují rozsáhlou podporu pro integraci součástí do návrhové prostředí.Další informace naleznete v tématu Postupy: Přístup ke službám během návrhu a Architektura návrhu.

Viz také

Úkoly

Postupy: Vytváření kontejnerů komponent

Postupy: Rozšíření kontejnerů komponent

Postupy: Přístup ke službám během návrhu

Koncepty

Komunikace mezi kontejnery a komponentami

Architektura návrhu