Contratos, exibições e adaptadores
Este tópico descreve os modos de exibição e adaptadores, os segmentos que são comuns a ambos os lados do pipeline add-in e o contrato que é usado pelo host e o suplemento. A ilustração a seguir mostra os segmentos do pipeline add-in.
Suplemento de pipeline
Para obter exemplos de código, consulte Demonstra Passo a passo: Ativando a compatibilidade com versões anteriores, como as alterações de Host e Demonstra Passo a passo: Coleções de passagem entre Hosts e suplementos.
Contratos
A primeira etapa no desenvolvimento do pipeline de comunicação é definir um contrato que deve ser derivado de IContract interface. Se o host e o suplemento estiver carregados para os domínios de aplicativo separado, um limite de isolamento existe entre o lado do suplemento do pipeline e o lado do host do pipeline. Um contrato é uma interface de controle de versão não define o protocolo de comunicação de tipos em um limite de isolamento. Por meio de contratos para se comunicar através de um limite de isolamento, o modelo de suplemento, impede que do host e do suplemento de implementações dos tipos de vazando pelo limite e causando problemas de versionamento.
Os objetos devem ser comunicados entre domínios de aplicativo devem ser remoto. Para obter mais informações sobre objetos de remoto, consulte Remotable and Nonremotable Objects.
O ContractBase classe fornece uma implementação padrão de IContract membros. A interface de contrato também pode herdar desta classe.
Requisitos de contrato
Contratos devem seguir um conjunto de requisitos para garantir que todos os tipos, expressos em contratos de seguros, podem ser feita a versão e podem passar entre o limite de isolamento entre hosts e suplementos.
Contratos devem herdar de IContract e deve usar somente os seguintes tipos:
Outros contratos derivados de IContract.
Tipos de dados primitivos: números inteiros e booleanos tipos.
Tipos serializáveis definidos no assembly do contrato.
Os tipos serializáveis definidos como mscorlib. dll, Int32 e DateTime.
Tipos de referência lacrado, serializável. Por exemplo, você pode passar um String de objeto por meio de limite de isolamento porque ele é um tipo de referência lacrada, serializável.
Enumerações que são definidas no contrato ou no mscorlib. dll.
AddInTokenobjetos.
Matrizes de qualquer precedente listados tipos, exceto uma matriz de contratos.
Para passar as coleções de objetos, usar tipos que implementam o genérico IList<T> de interface, como o List<T> e ArrayList coleções. Para passar essas coleções sobre o limite de isolamento, você convertê-los para temporariamente o IListContract<T> interface. O Demonstra Passo a passo: Coleções de passagem entre Hosts e suplementos tópico demonstra como passar coleções.
Para construir o pipeline, o contrato que representa o suplemento deve ser identificado com o AddInContractAttribute atributo.
A próxima etapa no desenvolvimento de pipeline é criar os segmentos de modo de exibição e o adaptador para ambos os lados do pipeline. Esses segmentos fornecem o aplicativo host e o suplemento com modos de exibição de seus modelos de objeto respectivos e fornecem adaptadores converter esses modos de exibição e para o contrato.
Modos de exibição
A exibição do suplemento do host e o modo de exibição de host do add-in são assemblies que contêm as interfaces ou classes abstratas que representam seus modos de exibição uns dos outros e dos tipos que fluem entre eles. Modos de exibição não dependem os contratos usados para comunicação entre eles. Modos de exibição também separam o add-in e o host de implementações do outro. Isso permite que os adaptadores e o contrato a ser alterada sem afetar o host ou o suplemento.
Para construir o pipeline, o tipo de exibição suplemento que o suplemento implementa ou herda é identificado pelo AddInBaseAttribute de atributo e é chamado de suplemento base. O modo de exibição do host não requer um atributo para descoberta, porque o modo de exibição do host é passado para o FindAddIns métodos.
Adaptadores
Os adaptadores de adicionar no lado do host são assemblies contendo classes de adaptador que são usados para converter entre os modos de exibição e o contrato. O termo "lado" refere-se ao lado do pipeline que reside um adaptador. Dependendo da direção da chamada, o adaptador é um convertendo a partir de um modo de exibição para um contrato ou um contrato para um modo de exibição. Se você tiver chamadas em ambas as direções (isto é, as chamadas de host para o suplemento e as chamadas de adicionar o host), você terá dois adaptadores em cada lado do pipeline. Da mesma forma, há dois tipos de adaptadores:
Adaptador de exibição para o contrato.
Uma classe em um assembly de adaptador converte a um modo de exibição em um contrato. Essa classe implementa o contrato chamando o passado para o construtor do modo de exibição e é empacotado no limite de um contrato. Essa classe deve herdar ContractBase e implementar o contrato.
Adaptador de exibição de contrato.
Uma classe do assembly do adaptador converte um contrato para um modo de exibição. Essa classe implementa ou herda o segmento de modo de exibição está convertendo, dependendo se o modo de exibição é uma interface ou um tipo base abstrato e implementa os membros do modo de exibição, chamando o contrato que é passado para o construtor do adaptador.
Para construir o pipeline, você deve identificar a classe do adaptador de adicionar no lado aplicando o AddInAdapterAttribute de atributo e identificar a classe do adaptador no lado do host, aplicando a HostAdapterAttribute atributo.
Adaptadores não devem ser públicos.