Kontenery, witryny i składniki
Kontener jest obiekt zbioru wyspecjalizowanych, który dostarcza logiczne zamknięcia dla jednego lub więcej elementów.Pojemniki zarządzać interakcji składników ze sobą, a także środowiska aplikacji zewnętrznej, zapewniając implementację ISite interfejsu, przez który interakcji może nastąpić.Kontener pozwala na śledzenie składniki na podstawie first-in, first-out i umożliwia odwoływanie się do składników przez indeks.Kontener przewiduje środki wspólne usuwania składników również gdy nie jest już potrzeba ich.
Zamknięcia odnosi się do zamknięcia logicznych, nie wizualne lub fizycznego zamknięcia.Kontener hermetyzuje jeden lub więcej składników i zapewnia otoki, za pomocą którego klienci mogą współdziałać.Kontener pozwala dodawać i usuwać składniki za pomocą następującej składni:
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);
Kontener składnika będzie, albo być wystąpieniem Container klasy lub implementacja IContainer interfejsu.Containerto implementacja odwołanie tego interfejsu.
Określanie nazwy składnika
Można również określić nazwę składnika w kontenerze.Ta nazwa musi być unikatowa w kontenerze i jest określona za pomocą Add metody.
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");
Zarządzanie zasobami i rozszerzanie kontenerów
Kontenery umożliwiają centralnego zarządzania zasobami skojarzone składniki.Gdy Dispose wywoływana jest metoda, kontener automatycznie wywołuje Dispose metody wszystkich składników zawartych, zapewniając, że zasoby są niezwłocznie zwolnione.
Pojemniki są rozszerzonego.Można utworzyć własne klasy, która dziedziczy z Container , zawiera niestandardowe funkcje.Na przykład, powodować kontenera wymuszane reguły rządzące składniki, które mogą być dodawane do kontenera, jak przedstawiono w następującym przykładzie:
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();
}
}
}
Poprzedni przykład tworzy nową klasę kontenera, który jest w stanie Wymuszaj reguły składniki informacje, które są w stanie przyłączyć kontenera.Jeśli składnik nie jest określona klasa (w tym przypadku widżet), zostanie zgłoszony wyjątek.
Po dodaniu składnika do kontenera, kontener tworzy witrynę dla niego.Jest to implementacja ISite interfejsu udostępniane za pośrednictwem składnika Site właściwości.Komunikacja przez składnik z jego kontenera hosta jest realizowane za pośrednictwem składnika Site właściwości.Ta właściwość reprezentuje logiczną witryny składnika i jest obsługiwana przez kontener.Składnik, który nie jest zawarty w pojemniku zwraca null odwołać się do jego Site właściwości.Site Właściwość pozwala uzyskać odwołania do interfejsu kontenera poprzez ISite.Container właściwość lub odwołanie do są obsługiwane przez interfejs składnika Component właściwości.
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());
Obie te właściwości zwracają tylko interfejs skojarzone z tych obiektów nie odwołanie do same obiekty.Należy zauważyć, że składnik ma również Container właściwość, która zwraca interfejsu Container.Ta właściwość jest dostarczane przez za pośrednictwem witryny i można traktować jako skrót.
Jeśli przypisać nazwę do części using Add metody nazwy mogą być pobierane za pośrednictwem Name właściwości.Jeśli kontener obiektu usługi skojarzone z nim, odwołanie do obiektu można uzyskać przez składnik via GetService metody.
Dostęp do usług
Można uzyskać dostęp do wielu usług poprzez GetService metody.Usługi te zapewniają obsługę rozległe zintegrowanie składników środowiska projektowania.Aby uzyskać więcej informacji, zobacz Porady: uzyskiwanie dostępu do usług pomocy technicznej czasu projektowania i Architektura czasu projektowania.
Zobacz też
Zadania
Porady: tworzenie kontenerów składników
Porady: rozszerzanie kontenerów składników
Porady: uzyskiwanie dostępu do usług pomocy technicznej czasu projektowania