Recipientes, sites e componentes
Um contêiner é um objeto da coleção especializados que fornece o confinamento lógico para um ou mais componentes.Contêineres de gerenciar a interação dos componentes entre si, bem sistema autônomo o ambiente de aplicativo externo, fornecendo uma implementação do ISite interface pela qual sistema autônomo interações podem ocorrer. O contêiner permite o acompanhamento dos seus componentes em cada fila primeiro a entrar e permite que você se refere a seus componentes por um índice.O contêiner também fornece um meio de eliminação comum dos componentes do quando você tem não há mais necessidade para eles.
Confinamento refere-se a contenção lógica, não confinamento visual ou física.O contêiner encapsula um ou mais componentes e fornece um wrapper através do qual os clientes podem interagem.O contêiner permite adicionar e remover componentes através da seguinte sintaxe:
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);
Um componente contêiner será uma instância do Container a classe ou uma implementação das IContainer interface. Container é a implementação de referência desta interface.
Especificando um nome de componente
Você também pode especificar um nome para seu componente dentro do contêiner.Esse nome deve ser exclusivo dentro do contêiner e é especificado usando o Add método.
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");
Gerenciando recursos e estendendo Containers
Contêineres fornecem um meio central de gerenciamento de recursos associados com seus componentes.Quando o Dispose método é chamado, o contêiner chama automaticamente o Dispose método de todos os componentes contidos, garantindo assim que recursos estão liberados imediatamente.
Recipientes são extensíveis.Você pode criar sua própria classe que herda de Container que incorpora a funcionalidade personalizada. Por exemplo, você pode criar um recipiente aplicadas regras que determinam quais componentes podem ser adicionados ao contêiner, é mostrado no exemplo a seguir:
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();
}
}
}
class MyContainer extends Container
{
public void Add(IComponent component) throws NonWidgetException
{
// Checks to see if the component is allowed to join this container.
if (component instanceof Widget)
{
super.Add(component);
}
else
{
throw new NonWidgetException() ;
}
}
}
O exemplo anterior cria uma nova classe de contêiner capaz de aplicar uma regra sobre quais componentes são capazes de associar o recipiente.Se não for um componente da classe especificada (no caso, widget), uma exceção é lançada.
Quando um componente é adicionado a um contêiner, o contêiner cria um site para ele.Esta é uma implementação do ISite interface que é exposto por meio do componente Site propriedade. Comunicação por um componente com seu contêiner de host é feita por meio Site propriedade. Essa propriedade representa o site lógico do componente e é hospedada pelo contêiner.Um componente que não está contido em um contêiner retorna um null referência para sua Site propriedade. The Site propriedade permite que você obtenha uma referência à interface do contêiner através de ISite.Container propriedade ou uma referência à interface do componente que está sendo hospedada por meio do Component propriedade.
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());
Component myComponent = new Component();
Container myContainer = new Container();
myContainer.Add(myComponent);
IComponent myIComponent;
IContainer myIContainer;
myIComponent = myComponent.get_Site().get_Component();
myIContainer = myComponent.get_Site().get_Container();
MessageBox.Show("Are the components equal? "
+ System.Convert.ToString(myComponent.Equals(myIComponent)));
MessageBox.Show("Are the containers equal? "
+ System.Convert.ToString(myContainer.Equals(myIContainer)));
Essas duas propriedades retornam somente a interface associada a esses objetos, e não uma referência para os objetos em si.Observe que o componente também h sistema autônomo um Container propriedade que retorna a mesma interface sistema autônomo Container. Esta propriedade é fornecida pelo através do site e pode ser pensada sistema autônomo um atalho.
Se você atribuir um nome para seu componente usando o Add método, o nome pode ser recuperado por meio do Name propriedade. Se o contêiner tem um objeto de serviço associado a ele, uma referência a esse objeto pode ser obtida pelo componente via o GetService método.
Acessando serviços
Você pode acessar uma variedade de serviços através de GetService método. Esses serviços fornecem amplo suporte para integrar seus componentes no ambiente de design.Para obter mais informações, consulte Como: Serviços de tempo de design de Acessar e Arquitetura de tempo de design.
Consulte também
Tarefas
Como: Criar componente Containers
Como: Estender contêineres de componente
Como: Serviços de tempo de design de Acessar