Вы находитесь на странице: 1из 98

Add-ins e extensibilidade

Este um contedo traduzido por mquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informaes.

Add-ins e extensibilidade
.NET Framework 4 Add-ins fornecem recursos estendidos ou servios para um aplicativo host.O .NET Framework fornece um modelo de programao que os desenvolvedores podem usar para desenvolver o add-ins e ativ-las em seus aplicativos de host.O modelo consegue isso criando um pipeline de comunicao 1 entre o host e o suplemento.O modelo implementado usando os tipos de System.AddIn , 2 3 4 System.AddIn.Hosting , System.AddIn.Pipeline , e System.AddIn.Contract namespaces. Esta viso geral contm as sees a seguir: Modelo de suplemento Fazer distino entre Hosts e suplementos Tpicos relacionados Referncia Observao Voc pode encontrar o cdigo de exemplo adicionais e customer technology previews das ferramentas para construo suplemento tubulaes, na site extensibilidade gerenciada e a 5 estrutura de suplemento no CodePlex .

Modelo de suplemento
O modelo de suplemento consiste em uma srie de segmentos que compe o suplemento pipeline (tambm conhecido como o pipeline de comunicao), que responsvel por toda a comunicao entre o add-in e o host.O pipeline um modelo de comunicao simtricos dos segmentos de trocar dados entre um add-in e o seu host.Desenvolver esses segmentos entre o host e o suplemento fornece necessrias camadas de abstrao que do suporte a verses e o isolamento de suplemento. A ilustrao a seguir mostra o pipeline. Suplemento de pipeline

Os assemblies para esses segmentos no devem estar no mesmo domnio de aplicativo.Voc pode carregar um suplemento no seu prprio domnio de aplicativo novo, em um domnio de aplicativo existente ou at mesmo no domnio de aplicativo do host.Voc pode carregar vrios add-ins no mesmo domnio de aplicativo, que permite que os suplementos compartilhar recursos e contextos de segurana.

Pgina 1 de 4

Add-ins e extensibilidade

O modelo de suplemento oferece suporte e recomenda, um limite opcional entre o host e o suplemento, que chamado de limite de isolamento (tambm conhecido como um limite de remoting).Esse limite pode ser um limite de processo ou de domnio de aplicativo. O segmento de contrato no meio do pipeline carregado no domnio de aplicativo do host e o domnio de aplicativo do suplemento.O contrato define os mtodos virtuais que o host e o uso de adicionar a troca de tipos entre si. Para passar pelo limite de isolamento, os tipos devem ser contratos ou tipos serializveis.Tipos de no contratos ou tipos serializveis devem ser convertidos para contratos por segmentos de adaptador no pipeline. Os segmentos de modo de exibio do pipeline so classes base abstratas ou interfaces que fornecem o host e o suplemento com um modo de exibio dos mtodos que compartilhem, conforme definido pelo contrato. Para obter mais informaes sobre o desenvolvimento de segmentos de pipeline, consulte Desenvolvimento de pipeline6. As sees a seguem descrevem os recursos do modelo de suplemento.

Versionamento independente
O modelo de suplemento permite hosts e suplementos para a verso independente.Como resultado, o modelo de suplemento permite os seguintes cenrios: Criao de um adaptador que permite que um host usar um suplemento criado para uma verso anterior do host. Criao de um adaptador que permite que um host usar um suplemento criado para uma verso posterior do host. Criao de um adaptador que permite que um host usar o add-ins criados para um host diferente.

Deteco e ativao
Voc pode ativar um add-in usando um token de uma coleo que representa os suplementos encontrados a partir de um armazenamento de informaes.Suplementos so encontrados pesquisando-se para o tipo que define o modo de exibio do host do add-in.Voc tambm pode encontrar um add-in especfico pelo tipo que define o add-in.O armazenamento de informaes consiste em dois arquivos de cache: o armazenamento de pipeline e o armazenamento de suplemento. Para obter informaes sobre como atualizar e reconstruir o armazenamento de informaes, 7 consulte Descoberta de suplemento .Para obter informaes sobre como ativar add-ins, consulte 8 Ativao de suplemento e Como: Ativar suplementos com nveis de segurana e isolamento de 9 diferente .

Nveis de isolamento e de processos externos


O modelo de suplemento oferece suporte a vrios nveis de isolamento entre um add-in e o seu host ou add-ins.Partindo de menos isolado, esses nveis so: O suplemento executado no mesmo domnio de aplicativo do host.Isso no recomendado porque voc perde o isolamento e o descarregamento de recursos que voc obtm ao usar diferentes domnios de aplicativo. Vrios suplementos so carregados no mesmo domnio de aplicativo diferente do usado pelo host de domnio de aplicativo. Cada suplemento carregado exclusivamente em seu prprio domnio de aplicativo.Este o nvel mais comuns de isolamento.

Pgina 2 de 4

Add-ins e extensibilidade

Vrios suplementos so carregados no mesmo domnio de aplicativo em um processo externo. Cada suplemento carregado exclusivamente em seu prprio domnio de aplicativo em um processo externo.Esse o cenrio mais isolado. Para obter mais informaes sobre o uso de processos externos, consulte Como: Ativar 9 suplementos com nveis de segurana e isolamento de diferente .

Gerenciamento da vida til


Porque o modelo de suplemento ultrapassa os limites de domnio e processo do aplicativo, a coleta de lixo por si s no suficiente para liberar e recuperar objetos.O modelo de suplemento fornece um mecanismo de gerenciamento do ciclo de vida usa tokens e contagem de referncia e geralmente no requer programao adicional.Para obter mais informaes, consulte Gerenciamento da vida til10. Voltar ao topo

Fazer distino entre Hosts e suplementos


A diferena entre um suplemento e um host simplesmente que o host o que ativa o add-in.O host pode ser o maior dos dois, como, por exemplo, um aplicativo de processamento de texto e de seus corretores ortogrficos; ou o host pode ser o menor dos dois, como, por exemplo, um cliente de mensagens instantneas que incorpora um media player.O modelo de suplemento oferece suporte a suplementos em cenrios de cliente e o servidor.Os suplementos do servidor exemplos de suplementos que fornecem os servidores de email com verificao de vrus, filtros de spam e proteo de IP.Exemplos de suplemento do cliente incluem suplementos de referncia para os processadores de texto a recursos especializados para programas grficos, jogos e antivrus para clientes de e-mail local. Voltar ao topo

Tpicos relacionados
Ttulo Descrio Descreve o pipeline de comunicao dos segmentos do aplicativo host do add-in.Fornece exemplos de cdigo nos tpicos de explicao passo a passo que descrevem como construir o pipeline e como implantar os segmentos no pipeline em Visual Studio.

Desenvolvimento de pipeline

Descoberta de suplemento Ativao de suplemento8

Descreve como tornar o add-ins detectvel por aplicativos de host.

Descreve como ativar e desativar add-ins.

Descreve como usar o carregamento de assembly de domnio Suplemento de desempenho11 neutro e imagens nativas para melhorar o desempenho do suplemento. Como: Ativar suplementos com nveis de segurana e 9 isolamento de diferente

Descreve como ativar suplementos em uma variedade de cenrios de nvel de segurana, o processo e o domnio de aplicativo.

Pgina 3 de 4

Add-ins e extensibilidade

Como: Usar dados de 12 qualificao

Descreve como aplicar e acessar dados personalizados atribudos aos suplementos e segmentos de pipeline.

Experincia do desenvolvedor Descreve como desenvolver um suplemento para usar os 13 segmentos necessrios do pipeline add-in. de suplemento Descreve o relacionamento entre domnios de aplicativo, que fornecem um limite de isolamento de segurana, confiabilidade e versionamento e assemblies.

Domnios de Aplicativos e 14 Assemblies

Voltar ao topo

Referncia
System.AddIn
1

System.AddIn.Contract System.AddIn.Hosting
2

System.AddIn.Pipeline Voltar ao topo

Tabela de Ligaes
1 2 3 4 5 6 7 8 9

http://msdn.microsoft.com/pt-br/library/system.addin.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.aspx http://msdn.microsoft.com/pt-br/library/system.addin.contract.aspx http://go.microsoft.com/fwlink/?LinkId=121190 http://msdn.microsoft.com/pt-br/library/bb384201.aspx http://msdn.microsoft.com/pt-br/library/bb384188.aspx http://msdn.microsoft.com/pt-br/library/bb384212.aspx http://msdn.microsoft.com/pt-br/library/bb384196.aspx http://msdn.microsoft.com/pt-br/library/bb384186.aspx http://msdn.microsoft.com/pt-br/library/bb892925.aspx http://msdn.microsoft.com/pt-br/library/bb788288.aspx http://msdn.microsoft.com/pt-br/library/bb384171.aspx http://msdn.microsoft.com/pt-br/library/43wc4hhs.aspx

10

11

12

13

14

Contedo da Comunidade

2011 Microsoft. Todos os direitos reservados.

Pgina 4 de 4

Desenvolvimento de pipeline

Este um contedo traduzido por mquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informaes.

Desenvolvimento de pipeline
.NET Framework 4 O pipeline add-in o caminho dos segmentos de pipeline, o aplicativo host e o suplemento devem usar para se comunicar entre si. A ilustrao a seguir mostra o pipeline de comunicao e seus segmentos. Suplemento de pipeline

O aplicativo de host est em uma extremidade do pipeline e o suplemento na outra extremidade.A partir de cada extremidade e em direo ao meio, o aplicativo host e o suplemento tem uma classe base abstrata que define um modo de exibio do modelo de objeto que ambos compartilham.Esses tipos (classes) compem o segmento de pipeline add-in view e o modo de exibio do host do segmento add-in do pipeline.O segmento de pipeline add-in do modo de exibio geralmente contm mais de uma classe abstrata, mas a classe que herda do suplemento conhecida como base add-in. O segmento de pipeline do adaptador de adicionar no lado e converter adaptador no lado do host pipeline segmento o fluxo dos tipos entre seus segmentos de pipeline do modo de exibio e o segmento de pipeline do contrato.O segmento de central do pipeline um contrato que derivado de IContract1 interface.Este contrato define os mtodos que o aplicativo host e o suplemento ir usar. Se voc carregar o host e o suplemento em domnios de aplicativo separado, voc tem um limite de isolamento que separa o escopo do aplicativo host do escopo do suplemento.O contrato um nico assembly que carregado no host e de domnios de aplicativos de suplemento.O host e o suplemento cada consultem somente sua exibio dos mtodos de contrato.Portanto, eles so separados por uma camada de abstrao do contrato. Para desenvolver os segmentos de pipeline, voc deve criar uma estrutura de diretrio que conter a eles.Para obter mais informaes sobre os requisitos de desenvolvimento e as diretrizes de escopo, 2 consulte Requisitos de desenvolvimento de pipeline . A ilustrao a seguir mostra os tipos que compem os segmentos de pipeline.Os nomes dos tipos mostrados na ilustrao so arbitrrios, mas todos os tipos exceto o host e o host de exibir os atributos de suplemento requerem para que eles podem ser descobertos por mtodos construir um armazenamento de informaes. Pipeline de suplemento com tipos

Pgina 1 de 5

Desenvolvimento de pipeline

A tabela a seguir descreve os segmentos de pipeline para ativar um add-in.Para obter mais 3 informaes sobre esses segmentos, consulte Contratos, exibies e adaptadores .

Segmento de pipeline Host

Descrio

O assembly de aplicativo que cria uma instncia de um suplemento. Representa o modo de exibio do aplicativo host dos tipos de objetos e mtodos usados para se comunicar com o suplemento.O modo de exibio do host uma interface ou classe base abstrata. Um assembly com uma ou mais classes que se adapta a mtodos e para o contrato.

Modo de exibio de host do add-in

Adaptador de host Esse segmento de pipeline identificado usando o HostAdapterAttribute4 atributo. No h suporte para vrios mdulos assemblies.
1

Uma interface que derivada de IContract interface e que define o protocolo para tipos de comunicao entre o host e o seu add-in. Contrato Esse segmento de pipeline identificado, definindo a AddInContractAttribute atributo. Adaptador de adicionar no lado Um assembly com uma ou mais classes que se adapta a mtodos e para o contrato. Esse segmento de pipeline identificado usando o AddInAdapterAttribute atributo.
6 5

Cada assembly no diretrio do adaptador de adicionar no lado que contm um 6 tipo que tem um AddInAdapterAttribute atributo carregado para o suplemento do domnio de aplicativo. Cada assembly no diretrio adicionar no lado carregado em seu prprio domnio de aplicativo.

Pgina 2 de 5

Desenvolvimento de pipeline

Vrios mdulos assemblies no so suportados. Um assembly que representa a exibio do suplemento dos tipos de objeto e mtodos que so usados para se comunicar com o host.O modo de exibio do suplemento uma interface ou classe base abstrata. Suplemento do modo de exibio Esse segmento de pipeline identificado usando o AddInBaseAttribute atributo. Cada assembly no diretrio AddInViews que contm um tipo que tem um 7 AddInBaseAttribute atributo carregado para o suplemento do domnio de aplicativo. Suplemento Um tipo instanciado que executa um servio para o host.
7

Caminho de ativao de pipeline


A ilustrao a seguir mostra a ativao de tipos quando um suplemento ativado.Ele tambm mostra a passagem de objetos para o host, como, por exemplo, os resultados de um clculo ou uma coleo de objetos.Este o cenrio mais comum. Caminho de ativao do add-in para o host

O caminho de ativao do pipeline ocorre da seguinte maneira: 1. O aplicativo host ativa o suplemento com o Activate mtodo. 2. O modo de exibio de add-in, add-in, add no lado adaptador e os assemblies de contrato so carregados para o domnio de aplicativo do suplemento. 3. Uma instncia do adaptador no lado adicionar criada usando o modo de exibio do suplemento (com a classe identificada pelo AddInBaseAttribute7 atributo) como o construtor.O adaptador de adicionar no lado herda a partir do contrato. 4. O adaptador de adicionar no lado, o que digitado como o contrato, passado entre o limite de isolamento (opcional) para o construtor do lado do host do adaptador. 5. O modo de exibio do host do adaptador de suplemento, o lado do host e os assemblies do contrato so carregados para o domnio de aplicativo do host. 6. Uma instncia do adaptador do host criada usando o contrato como seu construtor.O adaptador de host herda da exibio do host do add-in.
8

Pgina 3 de 5

Desenvolvimento de pipeline

7. O host tem o add-in, que digitado como o host exibir do add-in e pode continuar chamando seus mtodos.

Tutoriais
Existem trs tpicos de explicao passo a passo descrevem como criar tubulaes usando Visual Studio: Demonstra Passo a passo: Criando um aplicativo extensvel9 Descreve um suplemento de calculadora que realiza a adio, subtrao, multiplicao e clculos de divsion para o host. Demonstra Passo a passo: Ativando a compatibilidade com verses anteriores, como as 10 alteraes de Host Descreve um suplemento de calculadora com os recursos aprimorados de clculo e como manter a compatibilidade com o primeiro Calculadora suplemento. Demonstra Passo a passo: Colees de passagem entre Hosts e suplementos11 Descreve como passar de coletas de dados atravs de pipeline usando um cenrio de armazenamento do livro.

Consulte tambm
Conceitos Cenrios do Pipeline de suplemento Add-ins e extensibilidade13
12

Tabela de Ligaes
1 2 3 4 5 6 7 8 9

http://msdn.microsoft.com/pt-br/library/system.addin.contract.icontract.aspx http://msdn.microsoft.com/pt-br/library/bb384240.aspx http://msdn.microsoft.com/pt-br/library/bb384205.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.hostadapterattribute.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.addincontractattribute.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.addinadapterattribute.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.addinbaseattribute.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addintoken.activate.aspx http://msdn.microsoft.com/pt-br/library/bb788290.aspx http://msdn.microsoft.com/pt-br/library/bb384194.aspx http://msdn.microsoft.com/pt-br/library/bb384207.aspx http://msdn.microsoft.com/pt-br/library/bb384242.aspx http://msdn.microsoft.com/pt-br/library/bb384200.aspx

10

11

12

13

Contedo da Comunidade

Pgina 4 de 5

Desenvolvimento de pipeline

2011 Microsoft. Todos os direitos reservados.

Pgina 5 de 5

Requisitos de desenvolvimento de pipeline

Este um contedo traduzido por mquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informaes.

Requisitos de desenvolvimento de pipeline


.NET Framework 4 Para ativar os segmentos de tubulao e suplementos a serem descobertos e ativado, devem atender s escopo especificado, atributo e os requisitos de estrutura de diretrio.

Segmentos de tubulao e Assemblies


O add-ins, contratos e modos de exibio devem ser pblicos.Adaptadores e seus construtores podem ser internos. Normalmente, os segmentos de pipeline esto contidos dentro de seu prprio assembly, mas voc pode combinar os seguintes segmentos no mesmo assembly: Modos de exibio de host do add-ins e adicionar no lado. Adaptadores de host e adicionar no lado adaptadores. Voc pode combinar o host e adaptadores de adicionar no lado no mesmo assembly somente se voc combinar, tambm, os modos de exibio no mesmo assembly. Se voc combinar um segmento em um lado do pipeline com sua contraparte no outro lado do pipeline, como, por exemplo, as exibies do host de suplementos com exibies add-in, voc deve implantar o assembly para ambos os lados do pipeline para esse segmento. Se voc no combina os modos de exibio no mesmo assembly, voc pode combinar o host com o modo de exibio de host do add-in no mesmo assembly.

Requisitos de atributo
Os seguintes segmentos de pipeline requerem atributos nas classes que definem-los: Add-ins requerem AddInAttribute . Contratos exigem AddInContractAttribute . Suplemento modos de exibio exigem AddInBaseAttribute . Adicionar no lado adaptadores exigem AddInAdapterAttribute . Precisam de adaptadores de host HostAdapterAttribute . O modo de exibio do host do segmento de pipeline add-in no requer um atributo porque esse 6 objeto passado para o AddInStore.FindAddIns(Type, String, String[]) mtodo e portanto no precisa ser descoberto. A ilustrao a seguir mostra os segmentos de pipeline com seus atributos necessrios. Modelo de suplemento com os atributos necessrios em tipos
5 4 3 2 1

Pgina 1 de 6

Requisitos de desenvolvimento de pipeline

Requisitos do diretrio de pipeline


Para o .NET Framework para descobrir a segmentos de tubulao e ativar suplementos, o pipeline de segmentos devem ser colocados no diretrio especificado.Os nomes de diretrio especificado so necessrios, mas no diferenciam maisculas de minsculas.Apenas os nomes que no esto especificados so o nome da pasta raiz do pipeline (que voc fornecer para os mtodos de descoberta) e os nomes das subpastas que contm os suplementos.Todos os nomes do segmento especificado devem ser subdiretrios no mesmo nvel na raiz do pipeline. A ilustrao a seguir mostra esses requisitos de diretrio. Diretrios necessrios para o desenvolvimento de suplemento

A tabela a seguir descreve a estrutura de diretrio necessrio.

Diretrio Raiz do pipeline

Descrio O diretrio que contm as subpastas dos segmentos de pipeline.No h nenhum nome necessrio para este diretrio e pode ser em qualquer local. Exemplo: ..\Pipeline

Pgina 2 de 6

Requisitos de desenvolvimento de pipeline

Opcional.O diretrio que contm subdiretrios de um ou mais, cada qual contendo um add-in. AddIns Este diretrio deve ser nomeado AddIns. Exemplo: ..\Pipeline\AddIns Voc pode ter suplementos em outros locais no sistema. O diretrio que contm o conjunto de adaptadores de lado em Adicionar. AddInSideAdapters Este diretrio deve ser nomeado AddInSideAdapters. Exemplo: ..\Pipeline\AddInSideAdapters O diretrio que contm o conjunto de exibies de suplementos. AddInViews Este diretrio deve ser nomeado AddInViews. Exemplo: ..\Pipeline\AddInViews O diretrio que contm o conjunto de contratos. Contratos Este diretrio deve ser nomeado contratos. Exemplo: ..\Pipeline\Contracts O diretrio que contm o conjunto de adaptadores do lado do host. HostSideAdapters Este diretrio deve ser nomeado HostSideAdapters. Exemplo: ..\Pipeline\HostSideAdapters O AddInStore.Update7 e AddInStore.Rebuild8 mtodos tm sobrecargas que utilizam uma varivel 9 de seqncia de caracteres que representa a raiz do pipeline, ou um PipelineStoreLocation valor.Esses mtodos descubram suplementos disponveis e pipeline segmentos no sistema e mantm suas informaes em cache em um armazenamento de informaes.Para obter mais 10 informaes sobre os mtodos de descoberta, consulte Descoberta de suplemento . O aplicativo host e o modo de exibio do host do segmento de pipeline add-in so normalmente implantados no mesmo diretrio que pode ser em qualquer local.O aplicativo host requer uma referncia para o modo de exibio do host do segmento add-in que representa o add-in para ativar. O pipeline pode estar em qualquer local, inclusive dentro da estrutura de diretrio de sua soluo de Visual Studio.Voc deve copiar os segmentos de pipeline para os seus diretrios no pipeline.O diretrio de pipeline e seus subdiretrios so projetados para conter vrios pipelines.Para obter mais informaes sobre vrias tubulaes cenrios, consulte Cenrios do Pipeline de suplemento11.

Suplementos em outros locais.


No necessrio ter o add-ins na estrutura do diretrio de pipeline.Se no estiverem na estrutura do diretrio de pipeline, voc deve chamar o AddInStore.UpdateAddIns12 mtodo ou a 13 RebuildAddIns mtodo que leva o caminho para o diretrio que contm de add-ins, como parmetro. Voc tambm deve incluir o addInPaths parmetro ao chamar o AddInStore.FindAddIns
14

mtodo.

Pgina 3 de 6

Requisitos de desenvolvimento de pipeline

Se seu aplicativo host conhece os caminhos e nomes de tipo completo dos seus suplementos, pode 15 usar o FindAddIn mtodo para localizar um suplemento especfico, que evita a consultas sobre a estrutura de diretrio de pipeline.No entanto, uma estrutura de diretrios do pipeline ainda necessria.

Referncias de segmento de pipeline em Visual Studio


Ao adicionar uma referncia em um projeto para outro segmento de pipeline, como, por exemplo, o adaptador de adicionar no lado que requer uma referncia para o segmento de contrato, fazer uma referncia para o projeto do segmento em vez de seu assembly.Neste exemplo, a referncia seria o projeto do contrato.Uma referncia de projeto impede que os assemblies referenciados sendo implantado no pipeline, que pode causar conflitos.Conflitos tambm so impedidos por no copiar os arquivos localmente.

Para adicionar uma referncia de projeto


1. Em Solution Explorer, com o boto direito do referncias pasta e escolha Adicionar referncia de. 2. Sobre o projetos guia, escolha o projeto desejado e clique em OK. 3. Sob o referncias pasta, clique na referncia de projeto que voc acabou de adicionar. 4. Na referncia de Propriedades, defina Copy Local para False.

Referncias necessrias
A tabela a seguir lista os segmentos de pipeline que exigem referncias assembly para System.AddIn.dll e System.Contract.dll.Alguns segmentos tambm exigem referncias a outros segmentos compilados.

Segmento de pipeline Montagem e referncias de projeto

Referncias do namespace e tipo System.addin.pipeline System.addin.Contract

System.addin.dll Contrato System.addin.Contract.dll Suplemento do modo de exibio

System.addin.dll

System.addin.pipeline

System.addin.dll System.addin.Contract.dll Adaptador de adicionar no lado Segmento de suplemento do modo de exibio Segmento de contrato System.addin.dll System.addin.Contract.dll Adaptador de host Segmento de modo de exibio de host Segmento de contrato System.addin.pipeline System.addin.pipeline

Pgina 4 de 6

Requisitos de desenvolvimento de pipeline

Host

System.addin.dll

System.addin.Hosting

Segmento de modo de exibio de host modo de exibio de host System.addin.dll Suplemento Segmento de suplemento do modo de exibio System. AddIn suplemento do modo de exibio

O modo de exibio de host do add-in no possui referncia requisitos, mas necessria para o aplicativo host.

Implantando o Pipeline de Visual Studio


Em Visual Studio, voc pode criar segmentos de tubulao na estrutura de diretrio de pipeline, alterando o caminho de compilao de sada

Para implantar o pipeline de Visual Studio


1. Do Ferramentas , aponte para o projeto Propriedades e, em seguida, selecione o Build guia. 2. Alterar o caminho de sada para os segmentos de pipeline para seus respectivos diretrios na estrutura do diretrio de pipeline. O aplicativo host e o modo de exibio de host so normalmente implantados no mesmo diretrio.O diretrio de pipeline pode estar em qualquer local, mas normalmente no mesmo diretrio do aplicativo host.

Consulte tambm
Conceitos Contratos, exibies e adaptadores 10 Descoberta de suplemento Desenvolvimento de pipeline17
16

Tabela de Ligaes
1 2 3 4 5 6 7 8 9

http://msdn.microsoft.com/pt-br/library/system.addin.addinattribute.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.addincontractattribute.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.addinbaseattribute.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.addinadapterattribute.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.hostadapterattribute.aspx http://msdn.microsoft.com/pt-br/library/bb298536.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addinstore.update.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addinstore.rebuild.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.pipelinestorelocation.aspx http://msdn.microsoft.com/pt-br/library/bb384188.aspx http://msdn.microsoft.com/pt-br/library/bb384242.aspx

10

11

Pgina 5 de 6

Requisitos de desenvolvimento de pipeline

12

http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addinstore.updateaddins.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addinstore.rebuildaddins.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addinstore.findaddins.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addinstore.findaddin.aspx http://msdn.microsoft.com/pt-br/library/bb384205.aspx http://msdn.microsoft.com/pt-br/library/bb384201.aspx

13 14 15 16

17

Contedo da Comunidade

2011 Microsoft. Todos os direitos reservados.

Pgina 6 de 6

Contratos, exibies e adaptadores

Este um contedo traduzido por mquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informaes.

Contratos, exibies e adaptadores


.NET Framework 4 Este tpico descreve os modos de exibio e adaptadores, os segmentos que so comuns a ambos os lados do pipeline add-in e o contrato que usado pelo host e o suplemento.A ilustrao a seguir mostra os segmentos do pipeline add-in. Suplemento de pipeline

Para obter exemplos de cdigo, consulte Demonstra Passo a passo: Ativando a compatibilidade com 1 verses anteriores, como as alteraes de Host e Demonstra Passo a passo: Colees de passagem 2 entre Hosts e suplementos .

Contratos
A primeira etapa no desenvolvimento do pipeline de comunicao definir um contrato que deve 3 ser derivado de IContract interface.Se o host e o suplemento estiver carregados para os domnios 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 verso no define o protocolo de comunicao de tipos em um limite de isolamento.Por meio de contratos para se comunicar atravs de um limite de isolamento, o modelo de suplemento, impede que do host e do suplemento de implementaes dos tipos de vazando pelo limite e causando problemas de versionamento. Os objetos devem ser comunicados entre domnios de aplicativo devem ser remoto.Para obter 4 mais informaes sobre objetos de remoto, consulte Remotable and Nonremotable Objects . O ContractBase classe fornece uma implementao padro de IContract membros.A interface de contrato tambm pode herdar desta classe.
5 3

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 verso 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 IContract3. Tipos de dados primitivos: nmeros inteiros e booleanos tipos. Tipos serializveis definidos no assembly do contrato. Os tipos serializveis definidos como mscorlib. dll, Int326 e DateTime7. Tipos de referncia lacrado, serializvel.Por exemplo, voc pode passar um String8 de objeto por meio de limite de isolamento porque ele um tipo de referncia lacrada, serializvel.
3

Pgina 1 de 3

Contratos, exibies e adaptadores

Enumeraes que so definidas no contrato ou no mscorlib. dll. AddInToken9objetos. Matrizes de qualquer precedente listados tipos, exceto uma matriz de contratos. Para passar as colees de objetos, usar tipos que implementam o genrico IList<T> de interface, como o List<T>11 e ArrayList12 colees.Para passar essas colees sobre o limite de 13 isolamento, voc convert-los para temporariamente o IListContract<T> interface.O Demonstra 2 Passo a passo: Colees de passagem entre Hosts e suplementos tpico demonstra como passar colees. Para construir o pipeline, o contrato que representa o suplemento deve ser identificado com o 14 AddInContractAttribute atributo. A prxima etapa no desenvolvimento de pipeline criar os segmentos de modo de exibio e o adaptador para ambos os lados do pipeline.Esses segmentos fornecem o aplicativo host e o suplemento com modos de exibio de seus modelos de objeto respectivos e fornecem adaptadores converter esses modos de exibio e para o contrato.
10

Modos de exibio
A exibio do suplemento do host e o modo de exibio de host do add-in so assemblies que contm as interfaces ou classes abstratas que representam seus modos de exibio uns dos outros e dos tipos que fluem entre eles.Modos de exibio no dependem os contratos usados para comunicao entre eles.Modos de exibio tambm separam o add-in e o host de implementaes 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 exibio suplemento que o suplemento implementa ou herda 15 identificado pelo AddInBaseAttribute de atributo e chamado de suplemento base.O modo de exibio do host no requer um atributo para descoberta, porque o modo de exibio do host 16 passado para o FindAddIns mtodos.

Adaptadores
Os adaptadores de adicionar no lado do host so assemblies contendo classes de adaptador que so usados para converter entre os modos de exibio e o contrato.O termo "lado" refere-se ao lado do pipeline que reside um adaptador.Dependendo da direo da chamada, o adaptador um convertendo a partir de um modo de exibio para um contrato ou um contrato para um modo de exibio.Se voc tiver chamadas em ambas as direes (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 exibio para o contrato. Uma classe em um assembly de adaptador converte a um modo de exibio em um contrato.Essa classe implementa o contrato chamando o passado para o construtor do modo 5 de exibio e empacotado no limite de um contrato.Essa classe deve herdar ContractBase e implementar o contrato. Adaptador de exibio de contrato. Uma classe do assembly do adaptador converte um contrato para um modo de exibio.Essa classe implementa ou herda o segmento de modo de exibio est convertendo, dependendo se o modo de exibio uma interface ou um tipo base abstrato e implementa os membros do modo de exibio, chamando o contrato que passado para o construtor do adaptador.

Pgina 2 de 3

Contratos, exibies e adaptadores

Para construir o pipeline, voc deve identificar a classe do adaptador de adicionar no lado 17 aplicando o AddInAdapterAttribute de atributo e identificar a classe do adaptador no lado do host, aplicando a HostAdapterAttribute18 atributo. Adaptadores no devem ser pblicos.

Consulte tambm
Conceitos Requisitos de desenvolvimento de pipeline Desenvolvimento de pipeline20
19

Tabela de Ligaes
1 2 3 4 5 6 7 8 9

http://msdn.microsoft.com/pt-br/library/bb384194.aspx http://msdn.microsoft.com/pt-br/library/bb384207.aspx http://msdn.microsoft.com/pt-br/library/system.addin.contract.icontract.aspx http://msdn.microsoft.com/pt-br/library/h8f0y3fc.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.contractbase.aspx http://msdn.microsoft.com/pt-br/library/system.int32.aspx http://msdn.microsoft.com/pt-br/library/system.datetime.aspx http://msdn.microsoft.com/pt-br/library/system.string.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addintoken.aspx http://msdn.microsoft.com/pt-br/library/5y536ey6.aspx http://msdn.microsoft.com/pt-br/library/6sh2ey19.aspx

10 11 12 13

http://msdn.microsoft.com/pt-br/library/system.collections.arraylist.aspx http://msdn.microsoft.com/pt-br/library/bb383378.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.addincontractattribute.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.addinbaseattribute.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addinstore.findaddins.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.addinadapterattribute.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.hostadapterattribute.aspx http://msdn.microsoft.com/pt-br/library/bb384240.aspx http://msdn.microsoft.com/pt-br/library/bb384201.aspx

14 15 16 17 18 19

20

Contedo da Comunidade

2011 Microsoft. Todos os direitos reservados.

Pgina 3 de 3

Gerenciamento da vida til

Este um contedo traduzido por mquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informaes.

Gerenciamento da vida til


.NET Framework 4 Recursos de remoting o add-in do modelo complicam o gerenciamento da vida til.Como coleta de lixo no no adequadamente suporte recuperar objetos em vrios domnios de aplicativo, o modelo de suplemento fornece seu prprio sistema de gerenciamento da vida til.Este sistema de gerenciamento usa um sistema de contagem de referncia e os servios de comunicao remota do common language runtime. Sistema de gerenciamento do ciclo de vida o add-in do modelo pode abranger vrios domnios de aplicativos e processos isolados para certificar-se de que o add-ins, contratos e objetos sejam descartados e seus domnios de aplicativo so descarregados.O sistema faz isso mantendo um 1 identificador de token (ContractHandle ) para o suplemento durante o tempo que o add-in Servios uma chamada a partir do host.

Implementao de gerenciamento do ciclo de vida


Para implementar o gerenciamento da vida til, voc deve adquirir um token de tempo de vida, sempre que um contrato usado em um adaptador de exibio de contrato e revogar o token de 1 tempo de vida quando o adaptador terminado com ele.O ContractHandle classe isso funciona se voc us-lo em seus adaptadores.Se o pipeline passa tipos personalizados, voc deve adquirir o identificador de token em todas as classes de adaptador de exibio de contrato que voc implementar.Para obter mais informaes sobre adaptadores de contrato para exibio, consulte 2 Contratos, exibies e adaptadores . O ContractHandle classe leva o contrato como o construtor.O exemplo a seguir mostra como definir o identificador de token de tempo de vida em um adaptador de host. Importante O ContractHandle fundamental para o gerenciamento do ciclo de vida.Se voc deixar de 1 manter uma referncia para o ContractHandle , coleta de lixo ser solicit-lo, e objeto pipeline ser desligado quando o seu programa no espera o proprietrio.Isso pode levar a erros que 3 so difceis de diagnosticar, como AppDomainUnloadedException .Desligamento um estgio normal na vida de um pipeline, portanto no h nenhuma maneira para o cdigo de gerenciamento da vida til detectar que essa condio um erro.
1 1

private CalculatorContracts.ICalc2Contract _contract; private System.AddIn.Pipeline.ContractHandle _handle; public CalculatorContractToViewHostAdapter(ICalc2Contract contract) { _contract = contract; _handle = new System.AddIn.Pipeline.ContractHandle(contract); }

Depois de adquirir o identificador de token, o sistema se encarrega de todas as funes de gerenciamento do ciclo de vida e no requer nenhuma programao adicional.

Pgina 1 de 2

Gerenciamento da vida til

Sob o modelo de suplemento, o host e o add-ins operam como se o seu prprio gerenciamento da vida til foi controlado pelo coletor de lixo.Suas referncias de locais obtm descartadas e o que faz com que quaisquer referncias remotas ser descartado e coletados.

Suplemento de desligamento
O aplicativo host pode desligar domnio de aplicativo de um add-in, chamando o Shutdown 5 mtodo o AddInController classe.
4

O AddInController5 classe mantm o controle de suplementos e seus domnios de aplicativo para certificar-se de que eles so descarregados.

Consulte tambm
Conceitos Contratos, exibies e adaptadores Desenvolvimento de pipeline6
2

Tabela de Ligaes
1 2 3 4 5 6

http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.contracthandle.aspx http://msdn.microsoft.com/pt-br/library/bb384205.aspx http://msdn.microsoft.com/pt-br/library/system.appdomainunloadedexception.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addincontroller.shutdown.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addincontroller.aspx http://msdn.microsoft.com/pt-br/library/bb384201.aspx

Contedo da Comunidade
2011 Microsoft. Todos os direitos reservados.

Pgina 2 de 2

Demonstra Passo a passo: Criando um aplicativo extensvel

Este um contedo traduzido por mquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informaes.

Demonstra Passo a passo: Criando um aplicativo extensvel


.NET Framework 4 Esta explicao passo a passo descreve como criar um pipeline para um suplemento que executa funes da Calculadora simples.No demonstre um cenrio do mundo real; em vez disso, ele demonstra a funcionalidade bsica de um pipeline e como um suplemento pode fornecer servios para um host. Esta explicao passo a passo descreve as seguintes tarefas: Criando uma soluo de Visual Studio. Criando a estrutura do diretrio de pipeline. Criando o contrato e os modos de exibio. Criando o adaptador de lado em Adicionar. Criando o adaptador de host. Criando o host. Criando o suplemento. Implantando o pipeline. Executando o aplicativo host. Esse pipeline passa apenas os tipos serializveis (Double1 e String2), entre o host e o add-in.Para obter um exemplo que mostra como passar colees de tipos de dados complexos, consulte 3 Demonstra Passo a passo: Colees de passagem entre Hosts e suplementos . O contrato para esse pipeline define um modelo de objeto de quatro operaes aritmticas: Adicionar, subtrair, multiplicar e dividir.O host fornece o add-in com uma equao para calcular, como, por exemplo, 2 + 2 e o suplemento retorna o resultado para o host. A verso 2 do suplemento Calculadora fornece as possibilidades de clculo mais e demonstra o controle de verso.Ele est descrito no Demonstra Passo a passo: Ativando a compatibilidade com 4 verses anteriores, como as alteraes de Host . Observao Voc pode encontrar o cdigo de exemplo adicionais e customer technology previews das ferramentas para construo suplemento tubulaes, na site extensibilidade gerenciada e a estrutura de suplemento no CodePlex5.

Pr-requisitos
Voc precisa fazer o seguinte para concluir este passo a passo: Visual Studio.

Criao de uma soluo de Visual Studio


Pgina 1 de 15

Demonstra Passo a passo: Criando um aplicativo extensvel

Usar uma soluo em Visual Studio para conter projetos dos seus segmentos de pipeline.

Para criar a soluo de pipeline


1. Em Visual Studio, crie um novo projeto chamado Calc1Contract.Base-lo na Biblioteca de classe modelo. 2. Nomeie a soluo CalculatorV1.

Criando a estrutura do diretrio de Pipeline


O modelo de suplemento requer os assemblies de segmento de pipeline a ser colocado em uma estrutura de diretrio especificado.Para obter mais informaes sobre a estrutura do pipeline, 6 consulte Requisitos de desenvolvimento de pipeline .

Para criar a estrutura do diretrio de pipeline


1. Crie uma pasta de aplicativo em qualquer lugar no seu computador. 2. Nessa pasta, crie a seguinte estrutura: other Pipeline AddIns CalcV1 CalcV2 AddInSideAdapters AddInViews Contracts HostSideAdapters

No necessrio colocar a estrutura de pastas do pipeline na sua pasta de aplicativo; feito aqui apenas para sua convenincia.Na etapa de apropriado, a explicao passo a passo explica como alterar o cdigo, se a estrutura de pastas de pipeline est em um local diferente.Consulte a discusso de requisitos do diretrio de pipeline em Requisitos de 6 desenvolvimento de pipeline . Observao O CalcV2 pasta no usada nesta explicao passo a passo; um espao reservado para Demonstra Passo a passo: Ativando a compatibilidade com verses anteriores, como as 4 alteraes de Host .

Criao do contrato e modos de exibio


O segmento de contrato para esse pipeline define o ICalc1Contract interface, que define quatro mtodos: add, subtract, multiply, and divide.

Para criar o contrato.


1. Na soluo de Visual Studio chamada CalculatorV1, abra o Calc1Contract project. 2. Em Solution Explorer, adicionar referncias aos seguintes assemblies para o Calc1Contract projeto: System.addin.Contract.dll

Pgina 2 de 15

Demonstra Passo a passo: Criando um aplicativo extensvel

System.addin.dll 3. Em Solution Explorer, excluir a classe padro que adicionada nova Biblioteca de classe projetos. 4. Em Solution Explorer, adicione um novo item ao projeto, usando o Interface modelo.No Add New Item caixa de dilogo, o nome da interface ICalc1Contract. 5. O arquivo de interface Adicionar referncias a namespace para System.AddIn.Contract7 e 8 System.AddIn.Pipeline . 6. Use o cdigo a seguir para concluir esse segmento do contrato.Observe que esta interface 9 deve ter o AddInContractAttribute atributo.

using System.AddIn.Contract; using System.AddIn.Pipeline; namespace CalculatorContracts { // The AddInContractAttribute identifes this pipeline segment as a // cont ract. [AddInContract] publicinterface ICalc1Contract : IContract { double Add(double a, double b); double Subtract(double a, double b); double Multiply(double a, double b); double Divide(double a, double b); } }

7. Opcionalmente, crie a soluo de Visual Studio.A soluo no pode ser executada at que o ltimo procedimento, mas a cri-lo depois de cada procedimento garante que cada projeto corrigir. Porque o modo de exibio do suplemento e o host do modo de exibio do suplemento geralmente tm o mesmo cdigo, especialmente na primeira verso de um suplemento, voc pode criar facilmente os modos de exibio ao mesmo tempo.Diferem apenas um fator: o modo de 10 exibio do suplemento requer o AddInBaseAttribute atributo, enquanto o modo de exibio de host do add-in no requer quaisquer atributos.

Para criar a exibio do suplemento


1. Adicionar um novo projeto chamado Calc1AddInView para o CalculatorV1 soluo.Base-lo na Biblioteca de classe modelo. 2. Em Solution Explorer, adicione uma referncia a System.AddIn.dll para o Calc1AddInView project. 3. Em Solution Explorer, excluir a classe padro que adicionada nova Biblioteca de classe projetos e, em seguida, adicione um novo item ao projeto, usando o Interface modelo.No Add New Item caixa de dilogo, o nome da interface ICalculator. 4. No arquivo de interface, adicione uma referncia ao namespace para 8 System.AddIn.Pipeline .

Pgina 3 de 15

Demonstra Passo a passo: Criando um aplicativo extensvel

5. Use o cdigo a seguir para concluir este modo de exibio do suplemento.Observe que esta 10 interface deve ter o AddInBaseAttribute atributo.

using System.AddIn.Pipeline; namespace CalcAddInViews { // The AddInBaseAttribute identifes this interface as the basis for// the addin view pipeline segment. [AddInBase()] publicinterface ICalculator { double Add(double a, double b); double Subtract(double a, double b); double Multiply(double a, double b); double Divide(double a, double b); } }

6. Opcionalmente, crie a soluo de Visual Studio.

Para criar a exibio de host do add-in


1. Adicionar um novo projeto chamado Calc1HVA para o CalculatorV1 soluo.Base-lo na Biblioteca de classe modelo. 2. Em Solution Explorer, excluir a classe padro que adicionada nova Biblioteca de classe projetos e, em seguida, adicione um novo item ao projeto, usando o Interface modelo.No Add New Item caixa de dilogo, o nome da interface ICalculator. 3. No arquivo de interface, use o cdigo a seguir para concluir a exibio do host do add-in.

namespace CalcHVAs { publicinterface ICalculator { double Add(double a, double b); double Subtract(double a, double b); double Multiply(double a, double b); double Divide(double a, double b); } }

4. Opcionalmente, crie a soluo de Visual Studio.

Criao do adaptador de adicionar no lado


Este adaptador de adicionar no lado consiste em um adaptador de exibio para o contrato.Neste segmento de pipeline converte os tipos no modo de exibio add-in para o contrato. Nesse pipeline, o suplemento oferece um servio para o host e os tipos de fluxo do add-in para o host.Porque nenhum tipo de fluxo do host para o suplemento, no possuem incluem um adaptador de exibio de contrato do lado do suplemento desse pipeline.

Pgina 4 de 15

Demonstra Passo a passo: Criando um aplicativo extensvel

Para criar o adaptador de adicionar no lado


1. Adicionar um novo projeto chamado Calc1AddInSideAdapter para o CalculatorV1 soluo.Base-lo na Biblioteca de classe modelo. 2. Em Solution Explorer, adicionar referncias aos seguintes assemblies para o Calc1AddInSideAdapter projeto: System.addin.dll System.addin.Contract.dll 3. Adicione referncias de projeto para os projetos para os segmentos adjacentes do pipeline: Calc1AddInView Calc1Contract 4. Selecione cada referncia de projeto e em Propriedades set Copy Local para False.No Visual Basic, use o referncias guia de Propriedades do projeto para definir Copy Local para False para as duas referncias de projeto. 5. Renomeie a classe do projeto padro CalculatorViewToContractAddInSideAdapter. 6. No arquivo de classe, adicione referncias a namespace para System.AddIn.Pipeline . 7. No arquivo de classe, adicione referncias a namespace para os segmentos adjacentes: CalcAddInViews e CalculatorContracts.(Visual Basic, essas referncias do namespace so Calc1AddInView.CalcAddInViews e Calc1Contract.CalculatorContracts, a menos que voc tenha desativado os namespaces padro em seus projetos de Visual Basic.) 8. Aplicar o AddInAdapterAttribute de atributo para o CalculatorViewToContractAddInSideAdapter classe, para identific-lo como o adaptador de lado em Adicionar. 9. Verifique o CalculatorViewToContractAddInSideAdapter herdam da classe ContractBase , que fornece uma implementao padro da IContract13 interface e implementar a interface de contrato para o pipeline, ICalc1Contract. 10. Adicionar um construtor pblico que aceita um ICalculator, armazena em cache em um campo particular e chama o construtor da classe base. 11. Para implementar os membros da ICalc1Contract, basta chamar os membros correspondentes a ICalculator instncia que passada para o construtor e retorna os resultados.Isso se adapta o modo de exibio (ICalculator) para o contrato (ICalc1Contract). O cdigo a seguir mostra o adaptador de adicionar no lado concludo.
12 11 8

using System.AddIn.Pipeline; using CalcAddInViews; using CalculatorContracts; namespace CalcAddInSideAdapters { // The AddInAdapterAttribute identifes this class as the addinside adapt er// pipeline segment. [AddInAdapter()] publicclass CalculatorViewToContractAddInSideAdapter : ContractBase, ICalc1Contract { private ICalculator _view;

Pgina 5 de 15

Demonstra Passo a passo: Criando um aplicativo extensvel

public CalculatorViewToContractAddInSideAdapter(ICalculatorview) { _view=view; } publicvirtualdouble Add(double a,double b) { return _view.Add(a,b); } publicvirtualdouble Subtract(double a,double b) { return _view.Subtract(a,b); } publicvirtualdouble Multiply(double a,double b) { return _view.Multiply(a,b); } publicvirtualdouble Divide(double a,double b) { return _view.Divide(a,b); } } }

12. Opcionalmente, crie a soluo de Visual Studio.

Criando o adaptador de Host


Este adaptador de host consiste em um adaptador de exibio de contrato.Esse segmento adapta o contrato para o modo de exibio de host do add-in. Nesse pipeline, o suplemento oferece um servio do host e o fluxo de tipos do add-in para o host.Porque nenhum tipo de fluxo do host para o suplemento, no possuem incluem um adaptador de exibio para o contrato. Para implementar o gerenciamento da vida til, use um ContractHandle14 o objeto para anexar um token de tempo de vida do contrato.Voc deve manter uma referncia a este identificador para que o gerenciamento da vida til trabalhar.Depois que o token aplicado, nenhuma programao adicional necessria porque o sistema de add-in pode descartar objetos quando eles no esto sendo usados e disponibilizao-los para coleta de lixo.Para obter mais informaes, consulte Gerenciamento da vida til15.

Para criar o adaptador de host


1. Adicionar um novo projeto chamado Calc1HostSideAdapter para o CalculatorV1 soluo.Base-lo na Biblioteca de classe modelo. 2. Em Solution Explorer, adicionar referncias aos seguintes assemblies para o Calc1HostSideAdapter projeto: System.addin.dll System.addin.Contract.dll 3. Adicione referncias de projeto para os projetos para os segmentos adjacentes: Calc1Contract

Pgina 6 de 15

Demonstra Passo a passo: Criando um aplicativo extensvel

Calc1HVA 4. Selecione cada referncia de projeto e em Propriedades set Copy Local para False.No Visual Basic, use o referncias guia de Propriedades do projeto para definir Copy Local para False para as duas referncias de projeto. 5. Renomeie a classe do projeto padro CalculatorContractToViewHostSideAdapter. 6. No arquivo de classe, adicione referncias a namespace para System.AddIn.Pipeline8. 7. No arquivo de classe, adicione referncias a namespace para os segmentos adjacentes: CalcHVAs e CalculatorContracts.(Visual Basic, essas referncias do namespace so Calc1HVA.CalcHVAs e Calc1Contract.CalculatorContracts, a menos que voc tenha desativado os namespaces padro em seus projetos de Visual Basic.) 8. Aplicar o HostAdapterAttribute de atributo para o CalculatorContractToViewHostSideAdapter classe, para identific-lo como o segmento do adaptador no lado do host. 9. Verifique o CalculatorContractToViewHostSideAdapter a classe implementa a interface que representa o modo de exibio de host do add-in: Calc1HVAs.ICalculator (Calc1HVA.CalcHVAs.ICalculator em Visual Basic). 10. Adicionar um construtor pblico que aceita o tipo de contrato de pipeline, ICalc1Contract.O construtor deve armazenar em cache a referncia ao contrato.Ele tambm deve criar e 14 armazenar em cache uma nova ContractHandle para o contrato, para gerenciar a vida til do add-in. Importante O ContractHandle fundamental para o gerenciamento do ciclo de vida.Se voc deixar de manter uma referncia para o ContractHandle14 , coleta de lixo ser solicit-lo, e objeto pipeline ser desligado quando o seu programa no espera o proprietrio.Isso pode levar a erros que so difceis de diagnosticar, como AppDomainUnloadedException17.Desligamento um estgio normal na vida de um pipeline, portanto no h nenhuma maneira para o cdigo de gerenciamento da vida til detectar que essa condio um erro.
14 16

11. Para implementar os membros da ICalculator, basta chamar os membros correspondentes a ICalc1Contract instncia que passada para o construtor e retorna os resultados.Isso se adapta o contrato (ICalc1Contract) no modo de exibio (ICalculator). O cdigo a seguir mostra o adaptador concludo do lado do host.

using System.AddIn.Pipeline; using CalcHVAs; using CalculatorContracts; namespace CalcHostSideAdapters { //TheHostAdapterAttributeidentifesthisclassasthehostsideadapter/ /pipelinesegment. [HostAdapterAttribute()] publicclass CalculatorContractToViewHostSideAdapter:ICalculator { private ICalc1Contract_contract; private System.AddIn.Pipeline.ContractHandle_handle;

Pgina 7 de 15

Demonstra Passo a passo: Criando um aplicativo extensvel

public CalculatorContractToViewHostSideAdapter(ICalc1Contractcontract ) { _contract=contract; _handle=new ContractHandle(contract); } publicdouble Add(double a,double b) { return _contract.Add(a,b); } publicdouble Subtract(double a,double b) { return _contract.Subtract(a,b); } publicdouble Multiply(double a,double b) { return _contract.Multiply(a,b); } publicdouble Divide(double a,double b) { return _contract.Divide(a,b); } } }

12. Opcionalmente, crie a soluo de Visual Studio.

Criao do Host
Um aplicativo host interage com o suplemento por meio da exibio do host do add-in.Ele usa o 18 19 suplemento de deteco e ativao mtodos fornecidos pelo AddInStore e AddInToken classes para fazer o seguinte: Atualize o cache das informaes de pipeline e o suplemento. Localizar suplementos de tipo de exibio de host, ICalculator, com o pipeline diretrio da raiz. Solicite ao usurio especificar qual suplemento para usar. Ative o suplemento selecionado em um novo domnio de aplicativo com um nvel de confiana de segurana especificado. Execute o custom RunCalculator mtodo, que chama os mtodos do suplemento, conforme especificado pela exibio do host do add-in.

Para criar o host


1. Adicionar um novo projeto chamado Calc1Host para o CalculatorV1 soluo.Base-lo sobre o O aplicativo de Console modelo. 2. Em Solution Explorer, adicione uma referncia ao assembly System.AddIn.dll para o Calc1Host project. 3. Adicione uma referncia para o Calc1HVA project.Selecione a referncia de projeto e em Propriedades set Copy Local para False.No Visual Basic, use o referncias guia de Propriedades do projeto para definir Copy Local para False.

Pgina 8 de 15

Demonstra Passo a passo: Criando um aplicativo extensvel

4. Renomeie o arquivo de classe (mdulo de Visual Basic) MathHost1. 5. No Visual Basic, use o aplicativo guia da Propriedades do projeto caixa de dilogo para definir o objeto de inicializao para Sub Main. 6. No arquivo de classe ou mdulo, adicione uma referncia ao namespace para 20 System.AddIn.Hosting . 7. No arquivo de classe ou mdulo, adicione uma referncia ao namespace para o modo de exibio de host do add-in: CalcHVAs.(Visual Basic, essa referncia ao namespace Calc1HVA.CalcHVAs, a menos que voc tenha desativado os namespaces padro em seus projetos de Visual Basic.) 8. Em Solution Explorer, selecione a soluo e o projeto menu escolha Propriedades.No Solution Property Pages caixa de dilogo, definir o nico projeto de inicializao ser este projeto de aplicativo do host. 9. No arquivo de classe ou mdulo, use o AddInStore.Update21 mtodo para atualizar o 22 cache.Use o AddInStore.FindAddIn mtodo para obter uma coleo de tokens e usar o 23 AddInToken.Activate mtodo para ativar um add-in. O cdigo a seguir mostra o aplicativo de host completo.

using using using using using

System; System.Collections.Generic; System.Collections.ObjectModel; System.AddIn.Hosting; CalcHVAs;

namespace MathHost { class Program { staticvoid Main() { //Assumethatthecurrentdirectoryistheapplicationfolder,// andthatitcontainsthepipelinefolderstructure. StringaddInRoot=Environment.CurrentDirectory+"\\Pipeline"; //Updatethecachefilesofthepipelinesegmentsandaddins.str ing[]warnings=AddInStore.Update(addInRoot); foreach (string warningin warnings) { Console.WriteLine(warning); } //SearchforaddinsoftypeICalculator(thehostviewofthead din). Collection<AddInToken>tokens= AddInStore.FindAddIns(typeof(ICalculator),addInRoot); //Asktheuserwhichaddintheywouldliketouse. AddInTokencalcToken=ChooseCalculator(tokens); //ActivatetheselectedAddInTokeninanewapplicationdomain// withtheInternettrustlevel. ICalculatorcalc= calcToken.Activate<ICalculator>(AddInSecurityLevel.Internet); //Runtheaddin. RunCalculator(calc);

Pgina 9 de 15

Demonstra Passo a passo: Criando um aplicativo extensvel

} privatestatic AddInTokenChooseCalculator(Collection<AddInToken>token s) { if (tokens.Count==0) { Console.WriteLine("Nocalculatorsareavailable"); returnnull; } Console.WriteLine("AvailableCalculators:"); //ShowthetokenpropertiesforeachtokenintheAddInTokencoll ection//(tokens),precededbytheaddinnumberin[]brackets.int tokNumber =1; foreach (AddInTokentokin tokens) { Console.WriteLine(String.Format("\t[{0}]:{1} {2}\n\t{3}\n\t \t{4}\n\t\t{5} {6}", tokNumber.ToString(), tok.Name, tok.AddInFullName, tok.AssemblyName, tok.Description, tok.Version, tok.Publisher)); tokNumber++; } Console.WriteLine("Whichcalculatordoyouwanttouse?"); Stringline=Console.ReadLine(); int selection; if (Int32.TryParse(line,out selection)) { if (selection<=tokens.Count) { return tokens[selection 1]; } } Console.WriteLine("Invalidselection:{0}.Pleasechooseagain.", line); return ChooseCalculator(tokens); } privatestaticvoid RunCalculator(ICalculatorcalc) { if (calc==null) { //Nocalculatorswerefound;readalineandexit. Console.ReadLine(); } Console.WriteLine("Availableoperations:+,,*,/"); Console.WriteLine("Requestacalculation,suchas:2+2"); Console.WriteLine("Type\"exit\"toexit"); Stringline=Console.ReadLine(); while (!line.Equals("exit")) { //TheParserclassparsestheuser'sinput.try { Parserc=new Parser(line); switch (c.Action) { case"+": Console.WriteLine(calc.Add(c.A,c.B)); break;

Pgina 10 de 15

Demonstra Passo a passo: Criando um aplicativo extensvel

case"": Console.WriteLine(calc.Subtract(c.A, c.B)); break; case"*": Console.WriteLine(calc.Multiply(c.A, c.B)); break; case"/": Console.WriteLine(calc.Divide(c.A, c.B)); break; default: Console.WriteLine("{0} is an invalid command. Vali d commands are +,,*,/", c.Action); break; } } catch { Console.WriteLine("Invalid command: {0}. Commands must be formated: [number] [operation] [number]", line); } line = Console.ReadLine(); } } } internalclass Parser { double a; double b; string action; internal Parser(string line) { string[] parts = line.Split(' '); a = double.Parse(parts[0]); action = parts[1]; b = double.Parse(parts[2]); } publicdouble A { get { return a; } } publicdouble B { get { return b; } } publicstring Action { get { return action; } } } }

Observao

Pgina 11 de 15

Demonstra Passo a passo: Criando um aplicativo extensvel

Esse cdigo pressupe que a estrutura de pastas de pipeline est localizada na pasta do aplicativo.Se voc localizado-lo em outro lugar, altere a linha de cdigo que define o addInRoot varivel para que a varivel contm o caminho para a sua estrutura de diretrio de pipeline.

O cdigo usa um ChooseCalculator mtodo para listar os tokens e solicitar que o usurio escolha um add-in.O RunCalculator mtodo solicita ao usurio para expresses matemticas simples, analisa as expresses usando o Parser classe e exibe os resultados retornados pelo add-in. 10. Opcionalmente, crie a soluo de Visual Studio.

Criando o suplemento
Um suplemento implementa os mtodos especificados pelo modo de exibio do suplemento.Este suplemento implementa o Add, Subtract, Multiply, e Divide operaes e retorna os resultados para o host.

Para criar o suplemento


1. Adicionar um novo projeto chamado AddInCalcV1 para o CalculatorV1 soluo.Base-lo na Biblioteca de classe modelo. 2. Em Solution Explorer, adicione uma referncia ao assembly System.AddIn.dll para o projeto. 3. Adicione uma referncia para o Calc1AddInView project.Selecione a referncia de projeto e em Propriedades, defina Copy Local para False.No Visual Basic, use o referncias guia de Propriedades do projeto para definir Copy Local para False para a referncia de projeto. 4. Renomeie a classe AddInCalcV1. 5. No arquivo de classe, adicione uma referncia ao namespace para System.AddIn e o segmento de exibio do suplemento: CalcAddInViews (Calc1AddInView.CalcAddInViews em Visual Basic). 6. Aplicar o AddInAttribute como um add-in.
25 24

de atributo para o AddInCalcV1 classe, para identificar a classe

7. Verifique o AddInCalcV1 a classe implementa a interface que representa o modo de exibio do suplemento: CalcAddInViews.ICalculator (Calc1AddInView.CalcAddInViews.ICalculator em Visual Basic). 8. Implementar os membros da ICalculator , retornando os resultados dos clculos apropriados. O cdigo a seguir mostra o suplemento concludo.

using System.Collections.Generic; using System.AddIn; using CalcAddInViews; namespace CalcAddIns { // The AddInAttribute identifies this pipeline segment as an addin. [AddIn("Calculator AddIn",Version="1.0.0.0")] publicclass AddInCalcV1 : ICalculator { publicdouble Add(double a, double b)

Pgina 12 de 15

Demonstra Passo a passo: Criando um aplicativo extensvel

{ return a + b; } publicdouble Subtract(double a, double b) { return a b; } publicdouble Multiply(double a, double b) { return a * b; } publicdouble Divide(double a, double b) { return a / b; } } }

9. Opcionalmente, crie a soluo de Visual Studio.

Implantando o Pipeline
Agora voc est pronto para criar e implantar os segmentos de adicionar a estrutura do diretrio de pipeline necessrios.

Para implantar os segmentos de pipeline


1. Para cada projeto na soluo, use o Build guia de Propriedades do projeto (o compilar guia Visual Basic) para definir o valor da caminho de sada (o Build output path em Visual Basic).Se voc nomeou a sua pasta de aplicativo MyApp, por exemplo, seus projetos criaria nas seguintes pastas:

Project AddInCalcV1

Caminho MyApp\Pipeline\AddIns\CalcV1

Calc1AddInSideAdapter MyApp\Pipeline\AddInSideAdapters Calc1AddInView Calc1Contract Calc1Host MyApp\Pipeline\AddInViews MyApp\Pipeline\Contracts MyApp

Calc1HostSideAdapter MyApp\Pipeline\HostSideAdapters Calc1HVA MyApp

Pgina 13 de 15

Demonstra Passo a passo: Criando um aplicativo extensvel

Observao Se voc decidir colocar sua estrutura de pastas de pipeline em um local diferente da pasta do seu aplicativo, voc deve modificar os caminhos mostrados na tabela de acordo.Consulte a discusso de requisitos do diretrio de pipeline em Requisitos de 6 desenvolvimento de pipeline .

2. Crie a soluo de Visual Studio. 3. Verifique os diretrios de aplicativo e de pipeline para garantir que os assemblies foram copiados para os diretrios corretos e que no h cpias extras dos assemblies foram instaladas nas pastas erradas. Observao Se voc no alterou Copy Local para False para o Calc1AddInView referncia de projeto de AddInCalcV1 projeto, problemas de contexto do carregador impedir o add-in que est sendo localizado.

Para obter informaes sobre como implantar o pipeline, consulte Requisitos de desenvolvimento de pipeline6.

Executando o aplicativo Host


Agora voc est pronto para executar o host e interagir com o suplemento.

Para executar o aplicativo host


1. No prompt de comando, v para o diretrio de aplicativo e executar o aplicativo host, Calc1Host.exe. 2. O host localiza todos os suplementos disponveis do seu tipo e solicita que voc selecione um add-in.Digite 1 para o suplemento s est disponvel. 3. Insira uma equao para a Calculadora, como, por exemplo, 2 + 2.Deve haver espaos entre os nmeros e o operador. 4. Digite exit e pressione o Enter chave para fechar o aplicativo.

Consulte tambm
Tarefas Demonstra Passo a passo: Ativando a compatibilidade com verses anteriores, como as alteraes 4 de Host 3 Demonstra Passo a passo: Colees de passagem entre Hosts e suplementos Conceitos Requisitos de desenvolvimento de pipeline 26 Contratos, exibies e adaptadores Desenvolvimento de pipeline27
6

Tabela de Ligaes
1

http://msdn.microsoft.com/pt-br/library/system.double.aspx

Pgina 14 de 15

Demonstra Passo a passo: Criando um aplicativo extensvel

2 3 4 5 6 7 8 9

http://msdn.microsoft.com/pt-br/library/system.string.aspx http://msdn.microsoft.com/pt-br/library/bb384207.aspx http://msdn.microsoft.com/pt-br/library/bb384194.aspx http://go.microsoft.com/fwlink/?LinkId=121190 http://msdn.microsoft.com/pt-br/library/bb384240.aspx http://msdn.microsoft.com/pt-br/library/system.addin.contract.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.addincontractattribute.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.addinbaseattribute.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.addinadapterattribute.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.contractbase.aspx http://msdn.microsoft.com/pt-br/library/system.addin.contract.icontract.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.contracthandle.aspx http://msdn.microsoft.com/pt-br/library/bb384186.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.hostadapterattribute.aspx http://msdn.microsoft.com/pt-br/library/system.appdomainunloadedexception.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addinstore.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addintoken.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addinstore.update.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addinstore.findaddin.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addintoken.activate.aspx http://msdn.microsoft.com/pt-br/library/system.addin.aspx http://msdn.microsoft.com/pt-br/library/system.addin.addinattribute.aspx http://msdn.microsoft.com/pt-br/library/bb384205.aspx http://msdn.microsoft.com/pt-br/library/bb384201.aspx

10 11 12 13 14 15

16 17 18 19 20 21 22 23 24 25 26

27

Contedo da Comunidade
2011 Microsoft. Todos os direitos reservados.

Pgina 15 de 15

Demonstra Passo a passo: Ativando a compatibilidade com verses anteriores, como as alteraes de Host

Este um contedo traduzido por mquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informaes.

Demonstra Passo a passo: Ativando a compatibilidade com verses anteriores, como as alteraes de Host
.NET Framework 4 Esta explicao passo a passo descreve a verso 2 do pipeline descrita no Demonstra Passo a passo: 1 Criando um aplicativo extensvel .Verso 2 inclui mais recursos de clculo, fornecendo uma seqncia de caracteres delimitada por ponto-e-vrgula de operaes aritmticas, ele oferece suporte para o host.O host pode escolher uma operao e enviar uma equao para o suplemento calcular. O pipeline tem um novo host e um novo contrato.Para ativar a verso 1 do suplemento para trabalhar com um novo host e o contrato, o pipeline inclui a exibio de add-in usada para a verso 1 e um adaptador de adicionar no lado que converte os dados no modo de exibio de adicionar mais antiga para o novo contrato.A ilustrao a seguir mostra como os dois suplementos podem trabalhar com o mesmo host. Novo host, add-ins antigos

Esse pipeline tambm est descrito na Cenrios do Pipeline de suplemento2. Esta explicao passo a passo descreve as seguintes tarefas: Criando uma soluo de Visual Studio. Criando a estrutura do diretrio de pipeline. Criando o contrato e os modos de exibio. Criando o adaptador de adicionar no lado, o que inclui os adaptadores para a nova verso do suplemento e o add-in da verso 1. Criando o adaptador de host. Criando o host. Criando o suplemento. Implantando o pipeline. Executando o aplicativo host. Explicao passo a passo tambm demonstra o uso de classes base abstratas para definir modos de exibio e mostra que esses modos de exibio so compatveis com os modos de exibio so definidos pelas interfaces. recomendvel usar interfaces.

Pgina 1 de 17

Demonstra Passo a passo: Ativando a compatibilidade com verses anteriores, como as alteraes de Host

Observao Parte do cdigo mostrado nesta explicao contm referncias a namespace irrelevantes.As etapas de explicao passo a passo refletem com preciso as referncias necessrias em Visual Studio.

Voc pode encontrar o cdigo de exemplo adicionais e customer technology previews das ferramentas para construo suplemento tubulaes, na site extensibilidade gerenciada e a estrutura 3 de suplemento no CodePlex .

Pr-requisitos
Voc necessita dos seguintes componentes para completar este passo-a-passo: Visual Studio. O pipeline de verso 1 descrito em Demonstra Passo a passo: Criando um aplicativo extensvel1.Como verso 2 usa os segmentos de pipeline que foram desenvolvidos na verso 1, deve desenvolver e implantar o pipeline de verso 1 antes de executar as etapas neste tpico.

Criao de uma soluo de Visual Studio


Usar uma soluo em Visual Studio para conter projetos dos seus segmentos de pipeline.

Para criar a soluo de pipeline


1. Em Visual Studio, crie um novo projeto chamado Calc2Contract.Base-lo na Biblioteca de classe modelo. 2. Nomeie a soluo CalculatorV2.

Criando a estrutura do diretrio de Pipeline


O modelo de suplemento requer os assemblies de segmento de pipeline a ser colocado em uma estrutura de diretrio especificado.

Para criar a estrutura do diretrio de pipeline


Se voc no tiver feito isso, adicione a CalcV2 a estrutura de pastas de pipeline que voc criou na pasta Demonstra Passo a passo: Criando um aplicativo extensvel1.O CalcV2 pasta manter a nova verso do add-in. other Pipeline AddIns CalcV1 CalcV2 AddInSideAdapters AddInViews Contracts HostSideAdapters

No necessrio colocar a estrutura de pastas do pipeline na sua pasta de aplicativo; ele feito apenas por convenincia nessas orientaes.Se voc colocar a estrutura de pastas de pipeline em um local diferente na primeira explicao, siga o mesmo padro para esta

Pgina 2 de 17

Demonstra Passo a passo: Ativando a compatibilidade com verses anteriores, como as alteraes de Host

explicao passo a passo.Consulte a discusso de requisitos do diretrio de pipeline em 4 Requisitos de desenvolvimento de pipeline .

Criao do contrato e modos de exibio


O segmento de contrato para esse pipeline define o ICalc2Contract interface, que tem dois mtodos a seguir: O mtodo GetAvailableOperations. Esse mtodo retorna uma seqncia de operaes matemticas que o suplemento oferece suporte para o host.Verso 2 oferece suporte a operaes de cinco, e esse mtodo retorna a 5 seqncia "+,-,*,/,**" onde "**" representa o Pow operao. Nas exibies de add-in e o host, esse mtodo chamado Operations em vez de GetAvailableOperations. Voc pode expor mtodos no contrato como propriedades em modos de exibio atravs da converso de chamada de mtodo em uma propriedade no adaptador. O mtodo Operate. O host chama esse mtodo para enviar uma equao para o suplemento calcular e retornar o resultado.

Para criar o contrato.


1. Na soluo de Visual Studio chamada CalculatorV2, abra o Calc2Contract project. 2. Em Solution Explorer, adicionar referncias aos seguintes assemblies para o Calc2Contract projeto: System.addin.Contract.dll System.addin.dll 3. Em Solution Explorer, excluir a classe padro que adicionada nova Biblioteca de classe projetos. 4. Adicionar um novo item ao projeto, usando o Interface modelo.No Add New Item caixa de dilogo, o nome da interface ICalc2Contract. 5. O arquivo de interface Adicionar referncias a namespace para System.AddIn.Contract e System.AddIn.Pipeline7. 6. Use o cdigo a seguir para concluir o segmento de contrato.Observe que esta interface deve 8 ter o AddInContractAttribute atributo.
6

using using using using using

System; System.Collections.Generic; System.Text; System.AddIn.Contract; System.AddIn.Pipeline;

namespace CalculatorContracts { [AddInContract] publicinterface ICalc2Contract : IContract { string GetAvailableOperations(); double Operate(String operation, double a, double b);

Pgina 3 de 17

Demonstra Passo a passo: Ativando a compatibilidade com verses anteriores, como as alteraes de Host

} }

Porque o modo de exibio do suplemento e o modo de exibio de host tem o mesmo cdigo, voc pode cria fa r cilmente os modos de exibio a mesmo tempo.Diferem a o pena um fa s tor: o seAttribute9 a tributo; o modo de exibio de modo de exibio do suplemento requer o AddInBa host do a dd-in no requer qua isquer a tributos.

Para criar a exibio do suplemento para a verso 2


1. Adiciona um novo projeto cha do Ca r ma lc2AddInView pa o Ca ra lcula torV2 soluo.Ba se-lo naBiblioteca de classe modelo. 2. Em Solution Explorer, a dicione umarefernciaaSystem.AddIn.dll pa o Ca ra lc2AddInView project. 3. Renomeie acla sse Ca lcula tor2. 4. No a rquivo de cla sse, a dicione umarefernciaa na o mespa pa System.AddIn.Pipeline . ce ra 5. Verifique Ca lcula tor2 um a bstra cla ct sse (MustInherit cla sse Visua Ba l sic). 6. Use o seguinte cdigo pa este modo de exibio do suplemento.Observe que essacla ra sse deve ter o AddInBa seAttribute9 a tributo.
7

using using using using

System; System.Collections.Generic; System.Text; System.AddIn.Pipeline;

namespace CalcAddInViews { [AddInBase] publicabstractclass Calculator2 { publicabstractstring Operations { get; } publicabstractdouble Operate(string operation, double a, double b); } }

Para criar a exibio de host do add-in


1. Adiciona um novo projeto cha do Ca r ma lc2HVA pa o Ca ra lcula torV2 soluo.Ba se-lo na Biblioteca de classe modelo. 2. Renomeie acla sse Ca lcula dora . 3. Verifique Ca lcula doraum a bstra cla ct sse (MustInherit cla sse Visua Ba l sic). 4. No a rquivo de cla sse, use o cdigo aseguir pa cria aexibio de host do a ra r dd-in.

Pgina 4 de 17

Demonstra Passo a passo: Ativando a compatibilidade com verses anteriores, como as alteraes de Host

namespace CalcHVAs {

publicabstractclass Calculator { publicabstractstring Operations { get; } publicabstractdouble Operate(string operation, double a, double b); } }

Para demonstrar o uso da verso 1 suplemento com o novo host, a soluo deve incluir a exibio de suplemento criada para a verso 1 do add-in de Calculadora.

Para adicionar o projeto de suplemento do modo de exibio da verso 1


1. Em Solution Explorer, com o boto direito do CalculatorV2 soluo. 2. Clique em Adde em seguida, clique em Projeto existente. 3. V para as pastas que contm o CalculatorV1 arquivo de soluo e selecione o projeto para o Calc1AddInView project.

Criao do adaptador de adicionar no lado


Este adaptador de adicionar no lado consiste em dois adaptadores de modo de exibio-paracontrato: uma para adaptar-se a verso 2 suplemento exibio para o contrato da verso 2 e outra para adaptar-se a verso 1 add-in visualizao para o contrato da verso 2. Nesse pipeline, o suplemento oferece um servio para o host e os tipos de fluxo do add-in para o host.Porque nenhum tipo de fluxo do host para o suplemento, no possuem incluem um adaptador de exibio de contrato.

Para criar o adaptador de adicionar no lado


1. Adicionar um novo projeto chamado Calc2AddInSideAdapter para o CalculatorV2 soluo.Base-lo na Biblioteca de classe modelo. 2. Em Solution Explorer, adicionar referncias aos seguintes assemblies para o Calc2AddInSideAdapter projeto: System.addin.dll System.addin.Contract.dll 3. Adicione referncias de projeto para os seguintes projetos: Calc2AddInView Calc2Contract 4. Selecione cada referncia de projeto e em Propriedades definir Copy Local para False, para impedir que os assemblies referenciados sejam copiadas para a pasta build do local.Os assemblies estar localizados no diretrio de pipeline, conforme descrito em "Implantando o Pipeline" procedimento posteriormente nesta explicao passo a passo.No Visual Basic, use o referncias guia de Propriedades do projeto para definir Copy Local para False para as duas referncias de projeto.

Pgina 5 de 17

Demonstra Passo a passo: Ativando a compatibilidade com verses anteriores, como as alteraes de Host

5. Renomeie a classe do projeto padro CalculatorViewToContractAddInSideAdapter. 6. No arquivo de classe, adicione uma referncia ao namespace para System.AddIn.Pipeline7. 7. No arquivo de classe, adicione referncias a namespace para os segmentos adjacentes: CalcAddInViews e CalculatorContracts.(Visual Basic, essas referncias do namespace so Calc2AddInView.CalcAddInViews e Calc2Contract.CalculatorContracts, a menos que voc tenha desativado os namespaces padro em seus projetos de Visual Basic.) 8. Use o seguinte cdigo para esse adaptador de adicionar no lado.O padro de implementao semelhante para o adaptador de adicionar no lado da verso 1, embora a interface de contrato muito diferente.

using System.AddIn.Pipeline; using CalcAddInViews; using CalculatorContracts;

namespace CalcAddInSideAdapters {

[AddInAdapterAttribute] publicclass CalculatorViewToContractAddInAdapter : ContractBase, ICalc2Con tract { private Calculator2 _view; public CalculatorViewToContractAddInAdapter(Calculator2 calculator) { _view = calculator; } publicstring GetAvailableOperations() { return _view.Operations; } publicdouble Operate(string operation, double a, double b) { return _view.Operate(operation, a, b); } } }

Para ativar a verso 1 do suplemento para se comunicar com o novo host, o pipeline para o add-in da verso 1 requer um adaptador de adicionar no lado que converte os dados do modo de exibio de suplemento antigo para o novo contrato.

Para criar a verso 1 para o adaptador de adicionar no lado da verso 2


1. Adicionar um novo projeto chamado Calc2V1toV2AddInSideAdapter para o CalculatorV2 soluo.Base-lo na Biblioteca de classe modelo. 2. Em Solution Explorer, adicionar referncias aos seguintes assemblies para o Calc2V1toV2AddInSideAdapter projeto: System.addin.dll

Pgina 6 de 17

Demonstra Passo a passo: Ativando a compatibilidade com verses anteriores, como as alteraes de Host

System.addin.Contract.dll 3. Adicione referncias de projeto para os seguintes projetos: Calc1AddInView Calc2Contract 4. Selecione cada referncia de projeto e em Propriedades definir Copy Local para False, para impedir que os assemblies referenciados sejam copiadas para a pasta build do local.No Visual Basic, use o referncias guia de Propriedades do projeto para definir Copy Local para False para as duas referncias de projeto. 5. Renomeie a classe do projeto padro Calc2V1ViewToV2ContractAddInSideAdapter. 6. No arquivo de classe, adicione uma referncia ao namespace para System.AddIn.Pipeline . 7. No arquivo de classe, adicione referncias a namespace para os segmentos adjacentes: CalcAddInViews e CalculatorContracts.(Visual Basic essas referncias do namespace so Calc1AddInView.CalcAddInViews e Calc2Contract.CalculatorContracts, a menos que voc tenha desativado os namespaces padro em seus projetos de Visual Basic.) Observe que o namespace do modo de exibio da verso 1 e o contrato da verso 2. 8. Aplicar o AddInAdapterAttribute10 de atributo para o Calc2V1ViewToV2ContractAddInSideAdapter classe, para identific-lo como o adaptador de adicionar no lado. 9. Verifique o Calc2V1ViewToV2ContractAddInSideAdapter herdam da classe ContractBase , que fornece uma implementao padro da IContract12 interface e implementar a interface de contrato 2 da verso para o pipeline, ICalc2Contract. 10. Adicionar um construtor pblico que aceita um ICalculator, armazena em cache em um campo particular e chama o construtor da classe base. 11. Para implementar os membros da ICalc2Contract, voc deve chamar os membros apropriados a ICalculator instncia que passada para o construtor e retorna os resultados.Devido as diferenas entre a verso 1 e interfaces de contrato da verso 2, voc deve ter um switch instruo (Select Case instruo em Visual Basic) para adaptar o modo de exibio (ICalculator) para o contrato (ICalc2Contract). O cdigo a seguir mostra o adaptador de adicionar no lado concludo.
11 7

using using using using using using

System; System.Collections.Generic; System.Text; System.AddIn.Pipeline; CalcAddInViews; CalculatorContracts;

namespace AddInSideV1toV2Adapter { [AddInAdapter] publicclass Calc2V1ViewToV2ContractAddInSideAdapter : ContractBase, ICalc2 Contract { ICalculator _view; public Calc2V1ViewToV2ContractAddInSideAdapter(ICalculator calc) { _view = calc;

Pgina 7 de 17

Demonstra Passo a passo: Ativando a compatibilidade com verses anteriores, como as alteraes de Host

} publicstring GetAvailableOperations() { return"+, , *, /" ; } publicdouble Operate(string operation, double a, double b) { switch (operation) { case"+": return _view.Add(a, b); case"": return _view.Subtract(a, b); case"*": return _view.Multiply(a, b); case"/": return _view.Divide(a, b); default: thrownew InvalidOperationException("This addin does not s upport: " + operation); } } } }

Criando o adaptador de Host


Este adaptador de host consiste em um adaptador de exibio de contrato.Um adaptador de exibio de contrato suficiente para suportar as duas verses do suplemento, porque cada adaptador de adicionar no lado converte de seu respectivo modo de exibio para o contrato da verso 2. Nesse pipeline, o suplemento oferece um servio do host e o fluxo de tipos do add-in para o host.Porque nenhum tipo de fluxo do host para o suplemento, no possuem incluem um adaptador de exibio para o contrato. Para implementar o gerenciamento da vida til, use um ContractHandle o objeto para anexar um token de tempo de vida do contrato.Voc deve manter uma referncia a este identificador para que o gerenciamento da vida til trabalhar.Depois que o token aplicado, nenhuma programao adicional necessria porque o sistema de add-in pode descartar objetos quando eles no esto sendo usados e disponibilizao-los para coleta de lixo.Para obter mais informaes, consulte Gerenciamento da vida til14.
13

Para criar o adaptador de host


1. Adicionar um novo projeto chamado Calc2HostSideAdapter para o CalculatorV2 soluo.Base-lo na Biblioteca de classe modelo. 2. Em Solution Explorer, adicionar referncias aos seguintes assemblies para o Calc2HostSideAdapter projeto: System.addin.dll System.addin.Contract.dll 3. Adicione referncias de projeto para os seguintes projetos: Calc2Contract

Pgina 8 de 17

Demonstra Passo a passo: Ativando a compatibilidade com verses anteriores, como as alteraes de Host

Calc2HVA 4. Selecione cada referncia de projeto e em Propriedades definir Copy Local para False, para impedir que os assemblies referenciados sejam copiadas para a pasta build do local.No Visual Basic, use o referncias guia de Propriedades do projeto para definir Copy Local para False para as duas referncias de projeto. 5. Renomeie a classe do projeto padro CalculatorContractToViewHostSideAdapter. 6. No arquivo de classe, adicione referncias a namespace para System.AddIn.Pipeline7. 7. No arquivo de classe, adicione referncias a namespace para os segmentos adjacentes: CalcHVAs e CalculatorContracts.(Visual Basic, essas referncias do namespace so Calc2HVA.CalcHVAs e Calc2Contract.CalculatorContracts, a menos que voc tenha desativado os namespaces padro em seus projetos de Visual Basic.) 8. Aplicar o HostAdapterAttribute de atributo para o CalculatorContractToViewHostSideAdapter classe, para identific-lo como o adaptador de host. 9. Verifique o CalculatorContractToViewHostSideAdapter classe herda a classe base abstrata que representa o modo de exibio de host do add-in: CalcHVAs.Calculator (Calc2HVA.CalcHVAs.Calculator em Visual Basic).Observe a diferena da verso 1, onde o modo de exibio de host do add-in uma interface. 10. Adicionar um construtor pblico que aceita o tipo de contrato de pipeline, ICalc2Contract.O construtor deve armazenar em cache a referncia ao contrato.Ele tambm deve criar e armazenar em cache uma nova ContractHandle13 para o contrato, para gerenciar a vida til do add-in. Importante O ContractHandle fundamental para o gerenciamento do ciclo de vida.Se voc deixar de manter uma referncia para o ContractHandle13 , coleta de lixo ser solicit-lo, e objeto pipeline ser desligado quando o seu programa no espera o proprietrio.Isso pode levar a erros que so difceis de diagnosticar, como AppDomainUnloadedException16.Desligamento um estgio normal na vida de um pipeline, portanto no h nenhuma maneira para o cdigo de gerenciamento da vida til detectar que essa condio um erro.
13 15

11. Quando voc substituir os membros do Calculadora, basta chamar os membros correspondentes a ICalc2Contract instncia que passada para o construtor e retorna os resultados.Isso se adapta o contrato (ICalc2Contract) no modo de exibio (Calculadora). O cdigo a seguir mostra o segmento de adaptador concludo do lado do host.

using System.AddIn.Pipeline; using CalcHVAs; using CalculatorContracts; namespace CalcHostSideAdapters {

[HostAdapter] publicclass CalculatorContractToViewHostAdapter : Calculator { private CalculatorContracts.ICalc2Contract _contract;

Pgina 9 de 17

Demonstra Passo a passo: Ativando a compatibilidade com verses anteriores, como as alteraes de Host

private System.AddIn.Pipeline.ContractHandle _handle; public CalculatorContractToViewHostAdapter(ICalc2Contract contract) { _contract = contract; _handle = new System.AddIn.Pipeline.ContractHandle(contract); }

publicoverridestring Operations { get { return _contract.GetAvailableOperations(); } } publicoverridedouble Operate(string operation, double a, double b) { return _contract.Operate(operation, a, b); } } }

Criao do Host
Um aplicativo host interage com o suplemento por meio da exibio do host.Ele usa o suplemento 17 18 de deteco e ativao mtodos fornecidos pelo AddInStore e AddInToken classes para fazer o seguinte: Reconstrua o cache das informaes de pipeline e o suplemento. Localizar suplementos do tipo Calculator sob o diretrio de raiz do pipeline especificado. Solicite ao usurio especificar qual suplemento para usar.Neste exemplo, voc ver dois suplementos disponveis. Ative o suplemento selecionado em um novo domnio de aplicativo com um nvel de confiana de segurana especificado. Execute o RunCalculator mtodo, que chama os mtodos do suplemento conforme fornecido pela exibio do host do add-in.

Para criar o host


1. Adicionar um novo projeto chamado MathHost2 para o CalculatorV2 soluo.Base-lo sobre o O aplicativo de Console modelo. 2. Em Solution Explorer, adicione uma referncia ao assembly System.AddIn.dll para o MathHost2 project. 3. Adicione uma referncia para o Calc2HVA project.Selecione a referncia de projeto e em Propriedades definir Copy Local para False, para impedir que o assembly referenciado sejam copiadas para a pasta build do local.No Visual Basic, use o referncias guia de Propriedades do projeto para definir Copy Local para False. 4. Renomeie o arquivo de classe (mdulo de Visual Basic) MathHost2. 5. No Visual Basic, use o aplicativo guia da Propriedades do projeto caixa de dilogo para definir o objeto de inicializao para Sub Main.

Pgina 10 de 17

Demonstra Passo a passo: Ativando a compatibilidade com verses anteriores, como as alteraes de Host

6. No arquivo de classe ou mdulo, adicione uma referncia ao namespace para 19 System.AddIn.Hosting . 7. No arquivo de classe ou mdulo, adicione uma referncia ao namespace para a exibio do host do add-in: CalcHVAs.(Visual Basic, essa referncia ao namespace Calc2HVA.CalcHVAs, a menos que voc tenha desativado os namespaces padro em seus projetos de Visual Basic.) 8. Em Solution Explorer, selecione a soluo e o projeto menu escolha Propriedades.No Solution Property Pages caixa de dilogo, definir o nico projeto de inicializao ser este projeto de aplicativo do host. 9. Use o seguinte cdigo para criar o aplicativo host.

using using using using using using

System; System.Collections.Generic; System.Collections.ObjectModel; System.Text; System.AddIn.Hosting; CalcHVAs;

namespace MathHost { class Program { staticvoid Main() { //Assumethatthecurrentdirectoryistheapplicationfolder,// andthatitcontainsthepipelinefolderstructure. StringaddInRoot=Environment.CurrentDirectory+"\\Pipeline"; //Checktoseeifnewaddinshavebeeninstalled. AddInStore.Rebuild(addInRoot); //SearchforCalculatoraddins. Collection<AddInToken>tokens=AddInStore.FindAddIns(typeof(Calcu lator),addInRoot); //Asktheuserwhichaddintheywouldliketouse. AddInTokencalcToken=ChooseCalculator(tokens); //ActivatetheselectedAddInTokeninanew//applicationdomainwi ththeInternettrustlevel. Calculatorcalculator=calcToken.Activate<Calculator>(AddInSecuri tyLevel.Internet); //Runtheaddin. RunCalculator(calculator); } privatestatic AddInTokenChooseCalculator(Collection<AddInToken>token s) { if (tokens.Count==0) { Console.WriteLine("Nocalculatorsareavailable"); returnnull; } Console.WriteLine("AvailableCalculators:"); //Showthetokenpropertiesforeachtoken//intheAddInTokenc ollection(tokens),//precededbytheaddinnumberin[]brackets.int tokNumb er=1;

Pgina 11 de 17

Demonstra Passo a passo: Ativando a compatibilidade com verses anteriores, como as alteraes de Host

foreach (AddInTokentokin tokens) { Console.WriteLine(String.Format("\t[{0}]:{1} {2}\n\t{3}\n\t \t{4}\n\t\t{5} {6}", tokNumber.ToString(), tok.Name, tok.AddInFullName, tok.AssemblyName, tok.Description, tok.Version, tok.Publisher)); tokNumber++; } Console.WriteLine("Whichcalculatordoyouwanttouse?"); Stringline=Console.ReadLine(); int selection; if (Int32.TryParse(line,out selection)) { if (selection<=tokens.Count) { return tokens[selection 1]; } } Console.WriteLine("Invalidselection:{0}.Pleasechooseagain.", line); return ChooseCalculator(tokens); } privatestaticvoid RunCalculator(Calculatorcalc) { if (calc==null) { //Nocalculatorswerefound,readalineandexit. Console.ReadLine(); } Console.WriteLine("Availableoperations:" +calc.Operations); Console.WriteLine("Type\"exit\"toexit"); Stringline=Console.ReadLine(); while (!line.Equals("exit")) { //TheParserclassparsestheuser'sinput.try { Parserc=new Parser(line); Console.WriteLine(calc.Operate(c.Action,c.A,c.B)); } catch { Console.WriteLine("Invalidcommand:{0}.Commandsmustbe formated:[number][operation][number]",line); Console.WriteLine("Availableoperations:" +calc.Operatio ns); } line=Console.ReadLine(); } } }

internalclass Parser { internal Parser(Stringline) {

Pgina 12 de 17

Demonstra Passo a passo: Ativando a compatibilidade com verses anteriores, como as alteraes de Host

String[]parts=line.Trim().Split(''); a=Double.Parse(parts[0]); action=parts[1]; b=Double.Parse(parts[2]); } double a; publicdouble A { get {return a;} } double b; publicdouble B { get {return b;} } Stringaction; public StringAction { get {return action;} } } }

Observao Esse cdigo pressupe que a estrutura de pastas de pipeline est localizada na pasta do aplicativo.Se voc localizado-lo em outro lugar, altere a linha de cdigo que define o addInRoot varivel para que a varivel contm o caminho para a sua estrutura de diretrio de pipeline.

Criando o suplemento
Um suplemento implementa os mtodos especificados pelo modo de exibio do suplemento.Este add-in, o Operations mtodo retorna uma seqncia que lista as operaes matemticas que o suplemento oferece suporte.O Operate mtodo fornece o cdigo para calcular o resultado com base na seleo do host de uma operao e dois nmeros.

Para criar o suplemento


1. Adicionar um novo projeto chamado AddInCalcV2 para o CalculatorV2 soluo.Base-lo na Biblioteca de classe modelo. 2. Em Solution Explorer, adicionar referncias aos seguintes assemblies para o AddInCalcV2 projeto: System.addin.dll System.addin.Contract.dll 3. Adicione uma referncia para o Calc2AddInView project.Selecione a referncia de projeto e em Propriedades definir Copy Local para False, para impedir que o assembly referenciado sejam copiadas para a pasta build do local.No Visual Basic, use o referncias guia de Propriedades do projeto para definir Copy Local para False.

Pgina 13 de 17

Demonstra Passo a passo: Ativando a compatibilidade com verses anteriores, como as alteraes de Host

4. Renomeie o arquivo de classe SampleV2AddIn. 5. No arquivo de classe, adicione referncias a namespace para System.AddIn e 7 7 System.AddIn.Pipeline .System.AddIn.Pipeline necessrio apenas porque o cdigo inclui 21 um exemplo da QualificationDataAttribute atributo. 6. No arquivo de classe, adicione uma referncia ao namespace para o segmento de exibio de suplemento 2 verso: CalcAddInViews (Calc2AddInView.CalcAddInViews em Visual Basic). 7. Aplicar o AddInAttribute como um add-in.
22 20

de atributo para o SampleV2AddIn classe, para identificar a classe


21

8. Aplicar o QualificationDataAttribute atributo para o SampleV2AddIn classe e especifique as 18 informaes que o host pode recuperar a partir do AddInToken .Nesse caso, as informaes sugerem que o suplemento deve ser carregado em seu prprio domnio de 23 aplicativo.Consulte Como: Usar dados de qualificao . 9. Verifique o SampleV2AddIn classe herda a classe base abstrata que representa o modo de exibio do suplemento: Calculator2. 10. Substituir os membros do Calculator2 e retornar os resultados dos clculos apropriados. O cdigo a seguir mostra o suplemento concludo.

using System; using System.Collections.Generic; using System.Text; using System.AddIn; using System.AddIn.Pipeline; using CalcAddInViews; namespace CalcAddIns { //Thispipelinesegmenthas//twoattributes://1 AnAddInAttributetoiden tify//thissegmentasanaddin.////2 AQualificationDataAttributeto/ /indicatethattheaddinshould//beloadedintoanewapplicationd omain. [AddIn("CalculatorAddin",Version="2.0.0.0")] [QualificationData("Isolation","NewAppDomain")] publicclass SampleV2AddIn:Calculator2 { publicoverridestring Operations { get { return"+,,*,/,**"; } } publicoverridedouble Operate(string operation,double a,double b) { switch (operation) { case"+": return a+b; case"": return a b; case"*": return a*b; case"/":

Pgina 14 de 17

Demonstra Passo a passo: Ativando a compatibilidade com verses anteriores, como as alteraes de Host

return a/b; case"**": return Math.Pow(a,b); default: thrownew InvalidOperationException("Thisaddindoesnots upport:" +operation); } } } }

Implantando o Pipeline
Agora voc est pronto para criar e implantar os segmentos de adicionar a estrutura do diretrio de pipeline necessrios.

Para implantar os segmentos de pipeline


1. Para cada projeto na soluo, use o Build guia de Propriedades do projeto (o compilar guia Visual Basic) para definir o valor da caminho de sada (o Build output path em Visual Basic).Se voc nomeou a sua pasta de aplicativo MyApp, por exemplo, seus projetos criaria nas seguintes pastas:

Project AddInCalcV2 Calc2AddInSideAdapter

Caminho MyApp\Pipeline\AddIns\CalcV2 MyApp\Pipeline\AddInSideAdapters

Calc2V1toV2AddInSideAdapter MyApp\Pipeline\AddInSideAdapters Calc1AddInView Calc2AddInView Calc2Contract MathHost2 Calc2HostSideAdapter Calc2HVA Observao Se voc colocar a estrutura de pastas de pipeline em um local diferente da pasta do seu aplicativo, voc deve modificar os caminhos mostrados na tabela de acordo. MyApp\Pipeline\AddInViews MyApp\Pipeline\AddInViews MyApp\Pipeline\Contracts MyApp MyApp\Pipeline\HostSideAdapters MyApp

Pgina 15 de 17

Demonstra Passo a passo: Ativando a compatibilidade com verses anteriores, como as alteraes de Host

2. Crie a soluo de Visual Studio. 3. Verifique os diretrios de aplicativo e de pipeline, para garantir que os assemblies foram copiados para os diretrios corretos e que no h cpias extras dos assemblies foram instaladas nas pastas erradas. Observao Se voc no alterou Copy Local para False para o Calc2AddInView referncia de projeto de AddInCalcV2 projeto, problemas de contexto do carregador impedir o add-in que est sendo localizado.

Para obter informaes sobre como implantar o pipeline, consulte Requisitos de 4 desenvolvimento de pipeline .

Executando o aplicativo Host


Agora voc est pronto para executar o host e interagir com os suplementos.

Para executar o aplicativo host


1. Certifique-se de que as duas verses do suplemento so implantados. 2. No prompt de comando, v para o diretrio de aplicativo e executar o aplicativo host.Neste exemplo, o aplicativo host MathHost2.exe. 3. O host localiza todos os suplementos disponveis do seu tipo e solicita que voc selecione um add-in.Digite 1 ou 2. 4. Insira uma equao para a Calculadora, como, por exemplo, 2 + 2. 5. Digite exit e pressione o Enter chave para fechar o aplicativo. 6. Repita as etapas de 2 a 5 para executar o outro suplemento.

Consulte tambm
Tarefas Demonstra Passo a passo: Criando um aplicativo extensvel1 24 Demonstra Passo a passo: Colees de passagem entre Hosts e suplementos Conceitos Requisitos de desenvolvimento de pipeline4 25 Contratos, exibies e adaptadores 26 Desenvolvimento de pipeline

Tabela de Ligaes
1 2 3 4 5

http://msdn.microsoft.com/pt-br/library/bb788290.aspx http://msdn.microsoft.com/pt-br/library/bb384242.aspx http://go.microsoft.com/fwlink/?LinkId=121190 http://msdn.microsoft.com/pt-br/library/bb384240.aspx http://msdn.microsoft.com/pt-br/library/system.math.pow.aspx

Pgina 16 de 17

Demonstra Passo a passo: Ativando a compatibilidade com verses anteriores, como as alteraes de Host

6 7 8 9

http://msdn.microsoft.com/pt-br/library/system.addin.contract.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.addincontractattribute.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.addinbaseattribute.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.addinadapterattribute.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.contractbase.aspx http://msdn.microsoft.com/pt-br/library/system.addin.contract.icontract.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.contracthandle.aspx http://msdn.microsoft.com/pt-br/library/bb384186.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.hostadapterattribute.aspx http://msdn.microsoft.com/pt-br/library/system.appdomainunloadedexception.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addinstore.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addintoken.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.aspx http://msdn.microsoft.com/pt-br/library/system.addin.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.qualificationdataattribute.aspx http://msdn.microsoft.com/pt-br/library/system.addin.addinattribute.aspx http://msdn.microsoft.com/pt-br/library/bb788288.aspx http://msdn.microsoft.com/pt-br/library/bb384207.aspx http://msdn.microsoft.com/pt-br/library/bb384205.aspx http://msdn.microsoft.com/pt-br/library/bb384201.aspx

10 11 12 13 14

15 16 17 18 19 20 21 22 23

24

25

26

Contedo da Comunidade
2011 Microsoft. Todos os direitos reservados.

Pgina 17 de 17

Demonstra Passo a passo: Colees de passagem entre Hosts e suplementos

Este um contedo traduzido por mquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informaes.

Demonstra Passo a passo: Colees de passagem entre Hosts e suplementos


.NET Framework 4 Esta explicao passo a passo descreve como criar um pipeline que passa de uma coleo de objetos personalizados entre um suplemento e um host.Porque os tipos de coleo no so serializveis, adicionais classes que definem o modo de exibio-para-contrato e adaptadores de exibio de contrato devem ser adicionados aos segmentos de adaptador para que o fluxo de tipos pode cruzar o limite de isolamento. Nesse cenrio, o suplemento atualiza uma coleo de objetos de catlogo para o host.Cada objeto de catlogo contm mtodos que obtm e definir o ttulo do livro, Editor, preo e outros dados. Como uma demonstrao, o host cria uma coleo de livros; o suplemento diminui o preo de todos os livros de informtica em 20 por cento e remove todos os livros de horror da coleo.O add-in, em seguida, cria um novo objeto de catlogo para o catlogo de endereos mais vendido e passa para o host como um nico objeto. Essa explicao passo a passo ilustra as seguintes tarefas: Criando uma soluo de Visual Studio. Criando a estrutura do diretrio de pipeline. Criando os contratos e exibies para objetos que devem ser passados de e para trs entre o limite de isolamento. Criando os adaptadores de adicionar no lado e do lado do host, necessrios para passar objetos entre o limite de isolamento. Criando o host. Criando o suplemento. Implantando o pipeline. Executando o aplicativo host. Observao Parte do cdigo mostrado nesta explicao contm referncias a namespace irrelevantes.As etapas de explicao passo a passo refletem com preciso as referncias necessrias em Visual Studio.

Voc pode encontrar o cdigo de exemplo adicionais e customer technology previews das ferramentas para construo suplemento tubulaes, na site extensibilidade gerenciada e a estrutura 1 de suplemento no CodePlex .

Pr-requisitos
Voc necessita dos seguintes componentes para completar este passo-a-passo: Visual Studio. O arquivo de exemplo do Books. XML, pode ser copiado de Sample XML File (books.xml) .
2

Pgina 1 de 26

Demonstra Passo a passo: Colees de passagem entre Hosts e suplementos

Criao de uma soluo de Visual Studio


Use uma soluo em Visual Studio para conter projetos dos seus segmentos de pipeline.

Para criar a soluo de pipeline


1. No Visual Studio, crie um novo projeto chamado LibraryContracts.Base-lo na Biblioteca de classe modelo. 2. Nomeie a soluo BooksPipeline.

Criando a estrutura do diretrio de Pipeline


O modelo de suplemento requer que os assemblies do segmento de pipeline sejam colocados em uma estrutura de diretrio especificado.

Para criar a estrutura do diretrio de pipeline


Crie a seguinte estrutura de pasta no seu computador.Voc pode localiz-lo em qualquer lugar, inclusive dentro das pastas de sua soluo de Visual Studio. other Pipeline AddIns BooksAddIn AddInSideAdapters AddInViews Contracts HostSideAdapters

Todos os nomes de pasta devem ser especificados exatamente como mostrado aqui, exceto para o nome da pasta raiz e os nomes das pastas individuais de suplemento.Este exemplo usa Pipeline como o nome da pasta raiz e BooksAddIn como o nome do suplemento pasta. Observao Para sua convenincia, a explicao coloca o aplicativo host na pasta raiz de pipeline.Na etapa de apropriado, a explicao passo a passo explica como alterar o cdigo se o aplicativo estiver em um local diferente.

Para obter mais informaes sobre a estrutura de pastas do pipeline, consulte Requisitos de 3 desenvolvimento de pipeline .

Criao do contrato e modos de exibio


O segmento de contrato para esse pipeline define duas interfaces: A interface IBookInfoContract. Essa interface contm mtodos, como Author, que contm informaes sobre o catlogo. A interface ILibraryManagerContract. Essa interface contm o ProcessBooks mtodo que o suplemento usa para processar uma coleo de livros.Cada livro representa um IBookInfoContract contrato.A interface tambm

Pgina 2 de 26

Demonstra Passo a passo: Colees de passagem entre Hosts e suplementos

contm o Ge stSe r mtodo queo suple nto usa para forne r um obje decatlogo, tBe lle me ce to quere se pre nta o catlogo demais ve ndido, para o host.

Para criar o contrato.


1. Na soluo deVisual Studio chamada BooksPipe , abra o LibraryContracts proje line ct. 2. No Visual Basic, abra Propriedades para o LibraryContracts deproje eusar o aplicativo to guia para e xcluir o valor padro forne cido para namespace raiz.Por padro, namespace raiz de finida como o nomedo proje to. 3. Em Solution Explorer, adicionere rncias aos asse fe mblie se s guinte ao proje s to: Syte m.addin.Contract.dll Syste m.addin.dll 4. No arquivo declasse adicionar re rncias para o Syste , fe m.AddIn.Contract4 e 5 Syste m.AddIn.Pipe line name space s. 5. No arquivo declasse substitua a de , clarao declassepadro com duas inte rface s: O ILibraryManage rContract inte rface usada para ativar o add-in, portanto, e de le ve 6 te o AddInContractAttribute atributo. r O IBookInfoContract inte rfacere se pre nta um obje que transmitido e to ntreo host eo suple nto, para quee no re r o atributo. me le que Ambas as inte rface de m he s ve rdar deIContract inte rface . 6. Useo cdigo a se guir para adicionar o IBookInfoContract eILibraryManage rContract inte rface s.
7

using System; using System.Collections.Generic; using System.Text; using System.AddIn.Pipeline; using System.AddIn.Contract; namespace Library { [AddInContract] publicinterface ILibraryManagerContract : IContract { // Pass a collection of books,// of type IBookInfoContract// to the ad din for processing.void ProcessBooks(IListContract<IBookInfoContract> books); // Get a IBookInfoContract object// from the addin of the// the best selling book. IBookInfoContract GetBestSeller(); // This method has has arbitrary// uses and shows how you can// mix se rializable and custom types.string Data(string txt); } // Contains infomration about a book.publicinterface IBookInfoContract : I Contract { string ID(); string Author(); string Title(); string Genre(); string Price();

Pgina 3 de 26

Demonstra Passo a passo: Colees de passagem entre Hosts e suplementos

string Publish_Date(); string Description(); } }

Porque o modo de exibio do suplemento e o modo de exibio de host tem o mesmo cdigo, voc pode cria fa r cilmente os modos de exibio a mesmo tempo.Diferem a o pena um fa s tor: a exibio de a dd-in que usa pa a r esse segmento do pipeline requer o da ra tiva AddInBa seAttribute8 a tributo; o modo de exibio do host no requer qua isquer a tributos. A exibio do suplemento pa esse pipeline contm dua cla ra s sses a bstra s.O BookInfo cla ta sse fornece o modo de exibio pa o IBookInfoContra interfa e o Libra ra ct ce ryMa ger cla na sse fornece o modo de exibio pa o ILibra ra ryMa gerContra interfa na ct ce.

Para criar a exibio do suplemento


1. Adiciona um novo projeto cha do AddInViews pa o BooksPipeline soluo.Ba r ma ra se-lo na Biblioteca de classe modelo. 2. No Visua Ba l sic, a braPropriedades pa o projeto e use o aplicativo guiapa excluir o ra ra va pa lor dro fornecido pa namespace raiz. ra 3. Em Solution Explorer, a dicione umarefernciaaSystem.AddIn.dll pa o AddInViews ra project. 4. Renomeie acla sse do projeto pa dro Libra ryMa gere torna acla na r sse a bstra (MustInherit ct em Visua Ba l sic). 5. No a rquivo de cla sse, a dicione umarefernciapa o System.AddIn.Pipeline na ra mespa ce. 6. O Libra ryMa ger cla na sse usa pa a r o pipeline, porta da ra tiva nto, voc deve a plica o r 8 AddInBa seAttribute a tributo. 7. Use o seguinte cdigo pa concluir o resumo Libra ra ryMa ger cla na sse.
5

using System; using System.Collections.Generic; using System.AddIn.Pipeline; namespace LibraryContractsBase { // The AddInBaseAttribute// identifes this pipeline// segment as an addin vie w. [AddInBase] publicabstractclass LibraryManager { publicabstractvoid ProcessBooks(IList<BookInfo> books); publicabstract BookInfo GetBestSeller(); publicabstractstring Data(string txt); } }

8. Adiciona um a r bstra cla ct sse (MustInherit cla sse Visua Ba l sic) pa o projeto e denomine ra BookInfo.O BookInfo cla sse representaum objeto que tra nsmitido entre o host e o suplemento.Essacla sse no usa pa a r o pipeline, pa que ele no requer da ra tiva ra qua isquer a tributos.

Pgina 4 de 26

Demonstra Passo a passo: Colees de passagem entre Hosts e suplementos

9. Use o seguinte cdigo para concluir o resumo BookInfo classe.

using System; namespace LibraryContractsBase { publicabstractclass BookInfo { publicabstractstring publicabstractstring publicabstractstring publicabstractstring publicabstractstring publicabstractstring publicabstractstring } } ID(); Author(); Title(); Genre(); Price(); Publish_Date(); Description();

Para criar a exibio de host


1. Adicionar um novo projeto chamado HostViews para o BooksPipeline soluo.Base-lo na Biblioteca de classe modelo. 2. No Visual Basic, abra Propriedades para o projeto e use o aplicativo guia para excluir o valor padro fornecido para namespace raiz. 3. Renomeie a classe do projeto padro LibraryManagere tornar a classe abstract (MustInherit em Visual Basic). 4. Use o seguinte cdigo para concluir o resumo LibraryManager classe.

using System.Collections.Generic; namespace LibraryContractsHAV { publicabstractclass LibraryManager { publicabstractvoid ProcessBooks(System.Collections.Generic.IList<BookInfo> books); publicabstract BookInfo GetBestSeller(); publicabstractstring Data(string txt); } }

5. Adicionar um abstract classe (MustInherit classe Visual Basic) para o projeto e denomine BookInfo. 6. Use o seguinte cdigo para concluir o resumo BookInfo classe.

namespace LibraryContractsHAV {

Pgina 5 de 26

Demonstra Passo a passo: Colees de passagem entre Hosts e suplementos

publicabstractclass BookInfo { publicabstractstring publicabstractstring publicabstractstring publicabstractstring publicabstractstring publicabstractstring publicabstractstring } } ID(); Author(); Title(); Genre(); Price(); Publish_Date(); Description();

Criao do adaptador de adicionar no lado


O assembly de adicionar no lado adaptador para esse pipeline contm quatro classes de adaptador: BookInfoContractToViewAddInAdapter Este adaptador chamado quando o host transmitir um BookInfo o objeto para o suplemento, sozinha ou como parte de uma coleo.Essa classe converte o contrato com o BookInfo objeto para um modo de exibio.A classe herda o modo de exibio do suplemento e implementa os mtodos abstratos do modo de exibio chamando o contrato que passado para o construtor da classe. O construtor para este adaptador leva a um contrato, para que uma ContractHandle9 objeto podem ser aplicadas ao contrato para implementar o gerenciamento do ciclo de vida. Importante O ContractHandle fundamental para o gerenciamento do ciclo de vida.Se voc deixar 9 de manter uma referncia para o ContractHandle , coleta de lixo ser solicit-lo, e objeto pipeline ser desligado quando o seu programa no espera o proprietrio.Isso pode levar a erros que so difceis de diagnosticar, como 10 AppDomainUnloadedException .Desligamento um estgio normal na vida de um pipeline, portanto no h nenhuma maneira para o cdigo de gerenciamento da vida til detectar que essa condio um erro.
9

BookInfoViewToContractAddInAdapter Este adaptador chamado quando o add-in passa um BookInfo o objeto para o host.Essa classe converte a exibio do suplemento do BookInfo o objeto para um contrato.A classe herda a partir do contrato e implementa o contrato chamando a exibio de add-in que passada para o construtor da classe.Este adaptador empacotado para o host como um contrato. LibraryManagerViewToContractAddInAdapter Este o tipo retornado para o host de sua chamada para ativar o add-in.Esse tipo chamado quando o host chama o suplemento, incluindo a chamada que transmite uma coleo de objetos do host (IList<BookInfo>) para o add-in.Essa classe converte o contrato de ILibraryManagerContract para o modo de exibio de host LibraryManager.Esta classe herda o modo de exibio do host e implementa o contrato chamando o modo de exibio que passado para o construtor.

Pgina 6 de 26

Demonstra Passo a passo: Colees de passagem entre Hosts e suplementos

Porque uma coleo de tipos personalizados, o BookInfo objetos, deve ser empacotado em 11 um limite de isolamento, este adaptador usa o CollectionAdapters classe.Essa classe 12 fornece mtodos para converter um IList<T> coleo para um IListContract<T>13 a coleo, que permite que a coleo de ultrapassar o limite de isolamento para o outro lado do pipeline. BookInfoAddInAdapter O static mtodos (Shared mtodos em Visual Basic) do adaptador so chamados pela LibraryManagerViewToContractAddInAdapter classe para adaptar-se de um contrato ou modo de exibio, ou para retornar a um contrato existente ou modo de exibio.Isso impede que a criao de um adaptador adicional quando um objeto faz uma viagem entre o host e o suplemento.

Para criar o adaptador de adicionar no lado


1. Adicionar um novo projeto chamado AddInSideAdapters para o BooksPipeline soluo.Baselo na Biblioteca de classe modelo. 2. No Visual Basic, abra Propriedades para o projeto e use o aplicativo guia para excluir o valor padro fornecido para namespace raiz. 3. Em Solution Explorer, adicionar referncias aos seguintes assemblies para o AddInSideAdapters projeto: System.addin.dll System.addin.Contract.dll 4. Em Solution Explorer, adicionar referncias para os projetos a seguir para o AddInSideAdapters projeto: AddInViews LibraryContracts Na referncia de Propriedades, defina Copy Local para False para essas referncias para impedir que os assemblies referenciados sejam copiadas para o local pasta de compilao.Os assemblies estar localizados na estrutura do diretrio de pipeline, conforme descrito em "Implantando o Pipeline" procedimento posteriormente nesta explicao passo a passo. 5. Nomeie o arquivo de classe BookInfoContractToViewAddInAdapter. 6. No arquivo de classe, adicione uma referncia para o System.AddIn.Pipeline namespace. 7. Use o cdigo a seguir para adicionar o BookInfoContractToViewAddInAdapter classe.A classe no requer um atributo porque ele no usado para ativar o pipeline.O internal (Friend em Visual Basic) GetSourceContract mtodo usado pelo BookInfoAddInAdapter classe para evitar a criao de um adaptador adicional quando um objeto faz uma viagem entre o host e o add-in.
5

using System; using System.AddIn.Pipeline; namespace LibraryContractsAddInAdapters { publicclass BookInfoContractToViewAddInAdapter:LibraryContractsBase.BookInfo { private Library.IBookInfoContract_contract; private System.AddIn.Pipeline.ContractHandle_handle; public BookInfoContractToViewAddInAdapter(Library.IBookInfoContractcontra ct)

Pgina 7 de 26

Demonstra Passo a passo: Colees de passagem entre Hosts e suplementos

{ _contract=contract; _handle=new ContractHandle(contract); } publicoverridestring ID() { return _contract.ID(); } publicoverridestring Author() { return _contract.Author(); } publicoverridestring Title() { return _contract.Title(); } publicoverridestring Genre() { return _contract.Genre(); } publicoverridestring Price() { return _contract.Price(); } publicoverridestring Publish_Date() { return _contract.Publish_Date(); } publicoverridestring Description() { return _contract.Description(); } internal Library.IBookInfoContractGetSourceContract(){ return _contract; } } }

8. Use o cdigo a seguir para adicionar o BookInfoViewToContractAddInAdapter de classe para o AddInSideAdapters project.A classe no requer um atributo porque ele no usado para ativar o pipeline.O internal (Friend em Visual Basic) GetSourceView mtodo usado pelo BookInfoAddInAdapter classe para evitar a criao de um adaptador adicional quando um objeto faz uma viagem entre o host e o add-in.

using System; namespace LibraryContractsAddInAdapters { publicclass BookInfoViewToContractAddInAdapter:System.AddIn.Pipeline.Contrac tBase,Library.IBookInfoContract { private LibraryContractsBase.BookInfo_view; public BookInfoViewToContractAddInAdapter(LibraryContractsBase.BookInfovi ew) { _view=view; }

Pgina 8 de 26

Demonstra Passo a passo: Colees de passagem entre Hosts e suplementos

publicvirtualstring ID() { return _view.ID(); } publicvirtualstring Author() { return _view.Author(); } publicvirtualstring Title() { return _view.Title(); } publicvirtualstring Genre() { return _view.Genre(); } publicvirtualstring Price() { return _view.Price(); } publicvirtualstring Publish_Date() { return _view.Publish_Date(); } publicvirtualstring Description() { return _view.Description(); } internal LibraryContractsBase.BookInfoGetSourceView(){ return _view; } } }

9. Use o cdigo a seguir para adicionar o LibraryManagerViewToContractAddInAdapter de 14 classe para o AddInSideAdapters project.Essa classe requer o AddInAdapterAttribute de atributo, porque ele usado para ativar o pipeline. O ProcessBooks mtodo mostra como passar uma lista de livros, entre o limite de isolamento.Ele usa o CollectionAdapters.ToIList15 mtodo para converter a lista.Para converter os objetos na lista, ele passa a delegados para os mtodos do adaptador fornecidos pelo BookInfoAddInAdapter classe. O GetBestSeller mtodo mostra como passar um nico BookInfo o objeto entre o limite de isolamento.

using System.IO; using System.AddIn.Pipeline; using System.AddIn.Contract; using System.Collections.Generic; namespace LibraryContractsAddInAdapters { //TheAddInAdapterAttribute//identifesthispipeline//segmentasanaddin sideadapter. [AddInAdapter] publicclass LibraryManagerViewToContractAddInAdapter: System.AddIn.Pipeline.ContractBase,Library.ILibraryManagerContract {

Pgina 9 de 26

Demonstra Passo a passo: Colees de passagem entre Hosts e suplementos

private LibraryContractsBase.LibraryManager_view; public LibraryManagerViewToContractAddInAdapter(LibraryContractsBase.Libra ryManagerview) { _view=view; } publicvirtualvoid ProcessBooks(IListContract<Library.IBookInfoContract>bo oks) { _view.ProcessBooks(CollectionAdapters.ToIList<Library.IBookInfoContrac t, LibraryContractsBase.BookInfo>(books, LibraryContractsAddInAdapters.BookInfoAddInAdapter.ContractToViewA dapter, LibraryContractsAddInAdapters.BookInfoAddInAdapter.ViewToContractA dapter)); } publicvirtual Library.IBookInfoContractGetBestSeller() { return BookInfoAddInAdapter.ViewToContractAdapter(_view.GetBestSeller( )); } publicvirtualstring Data(string txt) { string rtxt=_view.Data(txt); return rtxt; } internal LibraryContractsBase.LibraryManagerGetSourceView() { return _view; } } }

10. Use o cdigo a seguir para adicionar o BookInfoAddInAdapter de classe para o AddInSideAdapters project.A classe contm dois static mtodos (Shared mtodos em Visual Basic): ContractToViewAdapter e ViewToContractAdapter.Os mtodos so internal (Friend em Visual Basic) porque eles so usados somente por outro adaptador classes.A finalidade desses mtodos evitar a criao de um adaptador extra quando um objeto faz uma viagem em qualquer direo entre o host e o suplemento.Esses mtodos devem ser fornecidos para adaptadores que passam objetos entre o limite de isolamento.

using System; namespace LibraryContractsAddInAdapters{ publicclass BookInfoAddInAdapter { internalstatic LibraryContractsBase.BookInfoContractToViewAdapter(Library .IBookInfoContractcontract) { if (!System.Runtime.Remoting.RemotingServices.IsObjectOutOfAppDomain(c ontract)&& (contract.GetType().Equals(typeof(BookInfoViewToContractAddInAdapt er)))) { return ((BookInfoViewToContractAddInAdapter)(contract)).GetSourceV iew();

Pgina 10 de 26

Demonstra Passo a passo: Colees de passagem entre Hosts e suplementos

} else { returnnew BookInfoContractToViewAddInAdapter(contract); } } internalstatic Library.IBookInfoContractViewToContractAdapter(LibraryCont ractsBase.BookInfoview) { if (!System.Runtime.Remoting.RemotingServices.IsObjectOutOfAppDomain(v iew)&& (view.GetType().Equals(typeof(BookInfoContractToViewAddInAdapter)) )) { return ((BookInfoContractToViewAddInAdapter)(view)).GetSourceContr act(); } else { returnnew BookInfoViewToContractAddInAdapter(view); } } } }

Criando o adaptador de Host


Este assembly do adaptador no lado do host para esse pipeline contm quatro classes de adaptador: BookInfoContractToViewHostAdapter Este adaptador chamado quando o add-in passa um BookInfo o objeto para o host, por si s, ou como parte de uma coleo.Essa classe converte o contrato com o BookInfo objeto para um modo de exibio.A classe herda o modo de exibio do host e implementa os mtodos abstratos do modo de exibio chamando o contrato que passado para o construtor da classe. O construtor para este adaptador leva a um contrato para seu construtor, para que uma 9 ContractHandle objeto podem ser aplicadas ao contrato para implementar o gerenciamento do ciclo de vida. Importante O ContractHandle9 fundamental para o gerenciamento do ciclo de vida.Se voc deixar 9 de manter uma referncia para o ContractHandle , coleta de lixo ser solicit-lo, e objeto pipeline ser desligado quando o seu programa no espera o proprietrio.Isso pode levar a erros que so difceis de diagnosticar, como 10 AppDomainUnloadedException .Desligamento um estgio normal na vida de um pipeline, portanto no h nenhuma maneira para o cdigo de gerenciamento da vida til detectar que essa condio um erro.

BookInfoViewToContractHostAdapter Este adaptador chamado quando o host transmitir um BookInfo o objeto para o addin.Essa classe converte o modo de exibio de host de BookInfo objeto para um contrato.A classe herda a partir do contrato e implementa o contrato chamando a exibio de add-in

Pgina 11 de 26

Demonstra Passo a passo: Colees de passagem entre Hosts e suplementos

que passada para o construtor da classe.Este adaptador empacotado para o add-in como um contrato. LibraryManagerContractToViewHostAdapter Este adaptador chamado quando o host passa uma coleo de BookInfo objetos add-in.O suplemento executa sua implementao da ProcessBooks mtodo na coleo. Essa classe converte o modo de exibio de host de LibraryManager objeto para um contrato.Ele herda a partir do contrato e implementa o contrato chamando o modo de exibio de host passado para o construtor da classe. Porque uma coleo de tipos personalizados, o BookInfo objetos, deve ser empacotado em 11 um limite de isolamento, este adaptador usa o CollectionAdapters classe.Essa classe fornece mtodos para converter um IList<T>12 coleo para um IListContract<T>13 a coleo, que permite que a coleo de ultrapassar o limite de isolamento para o outro lado do pipeline. BookInfoHostAdapter Este adaptador chamado pelo LibraryManagerViewToContractHostAdapter classe para retornar qualquer contratos existentes ou a modos de exibio para a adaptao em vez de criar novas instncias da chamada.Isso impede a criao de um adaptador extra, quando um objeto faz uma viagem em qualquer direo entre o host e o suplemento.

Para criar o adaptador de host


1. Adicionar um novo projeto chamado HostSideAdapters para o BooksPipeline soluo.Baselo na Biblioteca de classe modelo. 2. No Visual Basic, abra Propriedades para o projeto e use o aplicativo guia para excluir o valor padro fornecido para namespace raiz. 3. Em Solution Explorer, adicionar referncias aos seguintes assemblies para o HostSideAdapters projeto: System.addin.dll System.addin.Contract.dll 4. Em Solution Explorer, adicionar referncias para os projetos a seguir para o HostSideAdapters projeto: HostViews LibraryContracts Na referncia de Propriedades, defina Copy Local para False para essas referncias para impedir que os assemblies referenciados sejam copiadas para o local pasta de compilao. 5. No arquivo de classe, adicione uma referncia para o System.AddIn.Pipeline namespace. 6. Use o cdigo a seguir para adicionar o BookInfoContractToViewHostAdapter classe.A classe no requer um atributo porque ele no usado para ativar o pipeline.O internal (Friend em Visual Basic) GetSourceContract mtodo usado pelo BookInfoAddInAdapter classe para evitar a criao de um adaptador extra, quando um objeto faz uma viagem entre o host e o add-in.
5

using System.AddIn.Pipeline; namespace LibraryContractsHostAdapters { publicclass BookInfoContractToViewHostAdapter:LibraryContractsHAV.BookIn

Pgina 12 de 26

Demonstra Passo a passo: Colees de passagem entre Hosts e suplementos

fo { private Library.IBookInfoContract_contract; private ContractHandle_handle; public BookInfoContractToViewHostAdapter(Library.IBookInfoContractcon tract) { _contract=contract; _handle=new ContractHandle(contract); } publicoverridestring ID() { return _contract.ID(); } publicoverridestring Author() { return _contract.Author(); } publicoverridestring Title() { return _contract.Title(); } publicoverridestring Genre() { return _contract.Genre(); } publicoverridestring Price() { return _contract.Price(); } publicoverridestring Publish_Date() { return _contract.Publish_Date(); } publicoverridestring Description() { return _contract.Description(); }

internal Library.IBookInfoContractGetSourceContract(){ return _contract; } } }

7. Use o cdigo a seguir para adicionar o BookInfoViewToContractHostAdapter para o HostSideAdapters project.A classe no requer um atributo porque ele no usado para ativar o pipeline.O internal (Friend em Visual Basic) GetSourceView mtodo usado pelo BookInfoAddInAdapter classe para evitar a criao de um adaptador extra, quando um objeto faz uma viagem entre o host e o add-in.

using System.AddIn.Pipeline; namespace LibraryContractsHostAdapters { publicclass BookInfoViewToContractHostAdapter:ContractBase,Library.IBookInf

Pgina 13 de 26

Demonstra Passo a passo: Colees de passagem entre Hosts e suplementos

oContract { private LibraryContractsHAV.BookInfo_view; public BookInfoViewToContractHostAdapter(LibraryContractsHAV.BookInfoview ) { _view=view; } publicvirtualstring ID() { return _view.ID(); } publicvirtualstring Author() { return _view.Author(); } publicvirtualstring Title() { return _view.Title(); } publicvirtualstring Genre() { return _view.Genre(); } publicvirtualstring Price() { return _view.Price(); } publicvirtualstring Publish_Date() { return _view.Publish_Date(); } publicvirtualstring Description() { return _view.Description(); } internal LibraryContractsHAV.BookInfoGetSourceView() { return _view; } } }

8. Use o cdigo a seguir para adicionar o LibraryManagerContractToViewHostAdapter para o HostSideAdapters project.Essa classe requer o HostAdapterAttribute16 de atributo, porque ele usado para ativar o pipeline. O ProcessBooks mtodo mostra como passar uma lista de livros, entre o limite de 17 isolamento.Ele usa o CollectionAdapters.ToIListContract mtodo para converter a lista.Para converter os objetos na lista, ele passa a delegados para os mtodos do adaptador fornecidos pelo BookInfoHostAdapter classe. O GetBestSeller mtodo mostra como passar um nico BookInfo o objeto entre o limite de isolamento.

using System.Collections.Generic; using System.AddIn.Pipeline;

Pgina 14 de 26

Demonstra Passo a passo: Colees de passagem entre Hosts e suplementos

namespace LibraryContractsHostAdapters { [HostAdapterAttribute()] publicclass LibraryManagerContractToViewHostAdapter:LibraryContractsHAV.Libr aryManager { private Library.ILibraryManagerContract_contract; private System.AddIn.Pipeline.ContractHandle_handle; public LibraryManagerContractToViewHostAdapter(Library.ILibraryManagerCont ractcontract) { _contract=contract; _handle=new System.AddIn.Pipeline.ContractHandle(contract); } publicoverridevoid ProcessBooks(IList<LibraryContractsHAV.BookInfo>books) { _contract.ProcessBooks(CollectionAdapters.ToIListContract<LibraryContr actsHAV.BookInfo, Library.IBookInfoContract>(books, LibraryContractsHostAdapters.BookInfoHostAdapter.ViewToContractAda pter, LibraryContractsHostAdapters.BookInfoHostAdapter.ContractToViewAda pter)); } publicoverride LibraryContractsHAV.BookInfoGetBestSeller() { return BookInfoHostAdapter.ContractToViewAdapter(_contract.GetBestSell er()); } internal Library.ILibraryManagerContractGetSourceContract() { return _contract; } publicoverridestring Data(string txt) { string rtxt=_contract.Data(txt); return rtxt; } } }

9. Use o cdigo a seguir para adicionar o BookInfoHostAdapter de classe para o HostSideAdapters project.A classe contm dois static mtodos (Shared mtodos em Visual Basic): ContractToViewAdapter e ViewToContractAdapter.Os mtodos so internal (Friend em Visual Basic) porque eles so usados somente por outro adaptador classes.A finalidade desses mtodos evitar a criao de um adaptador extra quando um objeto faz uma viagem em qualquer direo entre o host e o suplemento.Esses mtodos devem ser fornecidos para adaptadores que passam objetos entre o limite de isolamento.

using System; namespace LibraryContractsHostAdapters { publicclass BookInfoHostAdapter {

Pgina 15 de 26

Demonstra Passo a passo: Colees de passagem entre Hosts e suplementos

internalstatic LibraryContractsHAV.BookInfoContractToViewAdapter(Library. IBookInfoContractcontract) { if (!System.Runtime.Remoting.RemotingServices.IsObjectOutOfAppDomain(c ontract)&& (contract.GetType().Equals(typeof(BookInfoViewToContractHostAdapte r)))) { return ((BookInfoViewToContractHostAdapter)(contract)).GetSourceVi ew(); } else { returnnew BookInfoContractToViewHostAdapter(contract); } } internalstatic Library.IBookInfoContractViewToContractAdapter(LibraryCont ractsHAV.BookInfoview) { if (!System.Runtime.Remoting.RemotingServices.IsObjectOutOfAppDomain(v iew)&& (view.GetType().Equals(typeof(BookInfoContractToViewHostAdapter))) ) { return ((BookInfoContractToViewHostAdapter)(view)).GetSourceContra ct(); } else { returnnew BookInfoViewToContractHostAdapter(view); } } } }

Criao do Host
Um aplicativo host interage com o suplemento por meio da exibio do host.Ele usa o suplemento 18 19 de deteco e ativao mtodos fornecidos pelo AddInStore e AddInToken classes para fazer o seguinte: Reconstrua o cache das informaes de pipeline e o suplemento. Localizar suplementos do tipo LibraryManager sob o diretrio de raiz do pipeline especificado. Solicite ao usurio selecionar o suplemento para usar.Neste exemplo, apenas um add-in est disponvel. Ative o suplemento selecionado em um novo domnio de aplicativo com um nvel de confiana de segurana especificado. Chamar o ProcessBooks mtodo para passar uma coleo de BookInfo objetos add-in.O addin chama a sua implementao da ProcessBooks mtodo e executa funes como, por exemplo, livros de informtica de desconto por 20 por cento. Chamadas a GetBestSeller mtodo que o suplemento usa para retornar um BookInfo o objeto com informaes sobre o catlogo mais vendidos.

Pgina 16 de 26

Demonstra Passo a passo: Colees de passagem entre Hosts e suplementos

Chamadas de Data mtodo para obter a taxa atual de imposto sobre vendas do add-in.Esse mtodo leva e retorna um string que um tipo de referncia de serializvel lacrado.Como resultado, o mtodo pode ser passado sobre o limite de isolamento para o outro lado do canal sem usar o modo de exibio-para-contrato ou contrato-para-exibio adaptadores. O host tem uma CreateBooks mtodo que cria uma coleo de BookInfo objetos.Esse mtodo cria a coleo usando o arquivo Books. XML de exemplo que est disponvel em Sample XML File 2 (books.xml) .

Para criar o host


1. Adicionar um novo projeto chamado livraria para o BooksPipeline soluo.Base-lo sobre o O aplicativo de Console modelo. 2. No Visual Basic, abra Propriedades para o projeto e use o aplicativo guia para excluir o valor padro fornecido para namespace raiz. 3. Em Solution Explorer, adicione uma referncia ao assembly System.AddIn.dll para o livraria project. 4. Adicione uma referncia para o HostViews project.Na referncia de Propriedades, defina Copy Local para False para essa referncia, para impedir que o assembly referenciado sejam copiadas para a pasta build do local. 5. No Visual Basic, altere o mdulo a uma classe: Excluir o mdulo padro do projeto e, em seguida, adicione uma classe chamada Program. Substituir o Public palavra-chave com o Friend palavra-chave. Adicionar um Shared Sub Main() procedimento para a classe. Uso o aplicativo guia da Propriedades do projeto caixa de dilogo para definir o objeto de inicializao para Sub Main. 6. No arquivo de classe, adicionar referncias para o System.AddIn.Pipeline e namespaces de segmento do host de exibio. 7. Em Solution Explorer, selecione a soluo e o projeto menu escolha Propriedades.No Solution Property Pages caixa de dilogo, definir o nico projeto de inicializao ser este projeto de aplicativo do host. 8. Use o seguinte cdigo para o aplicativo host. Observao No cdigo, alterar o local do qual o Books. XML arquivo carregado para "Books", para que o arquivo carregado a partir da pasta de aplicativo.Se voc deseja colocar o aplicativo em um local diferente do Pipeline pasta, altere a linha de cdigo que define o addInRoot varivel para que a varivel contm o caminho para a sua estrutura de diretrio de pipeline.
5

using using using using using using

System; System.Collections.Generic; System.Collections.ObjectModel; System.Text; LibraryContractsHAV; System.AddIn.Hosting;

Pgina 17 de 26

Demonstra Passo a passo: Colees de passagem entre Hosts e suplementos

using System.Xml;

namespace ListAdaptersHost { class Program { staticvoid Main(string[]args) { //Inthisexample,thepipelinerootisthecurrentdirectory. StringpipeRoot=Environment.CurrentDirectory; //Rebuildthecacheofpipelineandaddininformation.string[]warnings =AddInStore.Update(pipeRoot); if (warnings.Length>0) { foreach (string onein warnings) { Console.WriteLine(one); } } //FindaddinsoftypeLibraryManagerunderthespecifiedpipelinerootd irectory. Collection<AddInToken>tokens=AddInStore.FindAddIns(typeof(LibraryManage r),pipeRoot); //Determinewhichaddintouse. AddInTokenselectedToken=ChooseAddIn(tokens); //ActivatetheselectedAddInTokeninanew//applicationdomainwithas pecifiedsecuritytrustlevel. LibraryManagermanager=selectedToken.Activate<LibraryManager>(AddInSecur ityLevel.FullTrust); //Createacollectionofbooks. IList<BookInfo>books=CreateBooks(); //Showthecollectioncount. Console.WriteLine("Numberofbooks:{0}",books.Count.ToString()); //Havetheaddinprocessthebooks.//Theaddinwilldiscountcomputer booksby$20//andlisttheirbeforeandafterprices.It//willalsoremovea llhorrorbooks. manager.ProcessBooks(books); //Listthegenreofeachbook.There//shouldbenohorrorbooks.foreach (BookInfobkin books) { Console.WriteLine(bk.Genre()); } Console.WriteLine("Numberofbooks:{0}",books.Count.ToString()); Console.WriteLine(); //HavetheaddinpassaBookInfoobject//ofthebestsellingbook. BookInfobestBook=manager.GetBestSeller(); Console.WriteLine("Bestselleris{0}by{1}",bestBook.Title(),bestBook. Author()); //Havetheaddinshowthesalestaxrate. manager.Data("salestax"); AddInControllerctrl=AddInController.GetAddInController(manager);

Pgina 18 de 26

Demonstra Passo a passo: Colees de passagem entre Hosts e suplementos

ctrl.Shutdown(); Console.WriteLine("Pressanykeytoexit."); Console.ReadLine(); }

privatestatic AddInTokenChooseAddIn(Collection<AddInToken>tokens) { if (tokens.Count==0) { Console.WriteLine("Noaddinsofthistypeareavailable"); returnnull; } Console.WriteLine("{0}Availableaddin(s):",tokens.Count.ToString()); for (int i=0;i<tokens.Count;i++) { //ShowAddInTokenproperties. Console.WriteLine("[{0}] {1},Publisher:{2},Version:{3},Descript ion:{4}", (i+1).ToString(),tokens[i].Name,tokens[i].Publisher, tokens[i].Version,tokens[i].Description); } Console.WriteLine("Selectaddinbynumber:"); Stringline=Console.ReadLine(); int selection; if (Int32.TryParse(line,out selection)) { if (selection<=tokens.Count) { return tokens[selection 1]; } } Console.WriteLine("Invalidselection:{0}.Pleasechooseagain.",line); return ChooseAddIn(tokens); }

internalstatic IList<BookInfo>CreateBooks() { List<BookInfo>books=new List<BookInfo>(); string string string string string string string ParamId=""; ParamAuthor=""; ParamTitle=""; ParamGenre=""; ParamPrice=""; ParamPublish_Date=""; ParamDescription="";

XmlDocumentxDoc=new XmlDocument(); xDoc.Load(@"c:\Books.xml"); XmlNodexRoot=xDoc.DocumentElement; if (xRoot.Name=="catalog") { XmlNodeListbklist=xRoot.ChildNodes; foreach (XmlNodebkin bklist) { ParamId=bk.Attributes[0].Value; XmlNodeListdataItems=bk.ChildNodes; int items=dataItems.Count; foreach (XmlNodediin dataItems) {

Pgina 19 de 26

Demonstra Passo a passo: Colees de passagem entre Hosts e suplementos

switch (di.Name) { case"author": ParamAuthor=di.InnerText; break; case"title": ParamTitle=di.InnerText; break; case"genre": ParamGenre=di.InnerText; break; case"price": ParamPrice=di.InnerText; break; case"publish_date": ParamAuthor=di.InnerText; break; case"description": ParamDescription=di.InnerText; break; default: break; } } books.Add(new MyBookInfo(ParamId,ParamAuthor,ParamTitle,ParamGe nre, ParamPrice,ParamPublish_Date,ParamDescription)); } } return books; }

} class MyBookInfo:BookInfo { privatestring _id; privatestring _author; privatestring _title; privatestring _genre; privatestring _price; privatestring _publish_date; privatestring _description; public MyBookInfo(string id,string author,string title, string genre,string price, string publish_date,string description) { _id=id; _author=author; _title=title; _genre=genre; _price=price; _publish_date=publish_date; _description=description; } publicoverridestring ID() { return _id; }

Pgina 20 de 26

Demonstra Passo a passo: Colees de passagem entre Hosts e suplementos

publicoverridestring Title() { return _title; } publicoverridestring Author() { return _author; } publicoverridestring Genre() { return _genre; } publicoverridestring Price() { return _price; } publicoverridestring Publish_Date() { return _publish_date; } publicoverridestring Description() { return _description; } } }

Para criar o arquivo de dados do Books. XML


1. Adicionar um novo arquivo XML para o livraria project.No Add New Item caixa de dilogo, nomeie o arquivo Books. XML. 2. Substituir o contedo padro de Books. XML com o XML do Sample XML File (books.xml) . 3. No Solution Explorer, selecione Books. XMLe em Propriedades set Copy to Output Directory para Copy always.
2

Criando o suplemento
Um suplemento implementa os mtodos especificados pelo modo de exibio do suplemento.Este suplemento implementa o ProcessBooks mtodo.O mtodo executa as seguintes operaes em uma coleo de BookInfo objetos que o host transmitir a ele: Descontos o preo de todos os livros de informtica em 20 por cento. Remove todos os livros de horror da coleo. Este suplemento tambm implementa o GetBestSeller mtodo passando um BookInfo objeto que descreve o livro mais vendido no host.

Para criar o suplemento


1. Adicionar um novo projeto chamado BooksAddin para o BooksPipeline soluo.Base-lo na Biblioteca de classe modelo. 2. No Visual Basic, abra Propriedades para o projeto e use o aplicativo guia para excluir o valor padro fornecido para namespace raiz.

Pgina 21 de 26

Demonstra Passo a passo: Colees de passagem entre Hosts e suplementos

3. Em Solution Explorer, adicione uma referncia ao assembly System.AddIn.dll para o BooksAddin project. 4. Adicione uma referncia para o AddInViews project.Na referncia de Propriedades, defina Copy Local para False para essa referncia, para impedir que o assembly referenciado sejam copiadas para a pasta build do local. 5. No arquivo de classe, adicionar referncias para o System.AddIn segmento de exibio do suplemento. 6. Use o seguinte cdigo para o suplemento de aplicativo.
20

e namespaces de

using using using using using using

System; System.Collections.Generic; System.Text; LibraryContractsBase; System.AddIn; System.IO;

namespace BooksAddIn { [AddIn("Books AddIn",Description="Book Store Data", Publisher="Microsoft",Version="1.0.0.0")] publicclass BooksAddIn : LibraryManager { // Calls methods that updates book data// and removes books by their genre .publicoverridevoid ProcessBooks(IList<BookInfo> books) { for (int i = 0; i < books.Count; i++) { books[i] = UpdateBook(books[i]); } RemoveGenre("horror", books); } publicoverridestring Data(string txt) { // assumes txt = "sales tax"string rtxt = txt + "= 8.5%"; return rtxt; } internalstatic IList<BookInfo> RemoveGenre(string genre, IList<BookInfo> b ooks) { // Remove all horror books from the collection.for (int i = 0; i < boo ks.Count; i++) { if (books[i].Genre().ToLower() == "horror") books.RemoveAt(i); } return books; } // Populate a BookInfo object with data// about the best selling book.publ icoverride BookInfo GetBestSeller() { string ParamId = "bk999"; string ParamAuthor = "Corets, Eva"; string ParamTitle = "Cooking with Oberon"; string ParamGenre = "Cooking"; string ParamPrice = "7.95";

Pgina 22 de 26

Demonstra Passo a passo: Colees de passagem entre Hosts e suplementos

string ParamPublish_Date = "20061201"; string ParamDescription = "Recipes for a postapocalyptic society."; MyBookInfo bestBook = new MyBookInfo(ParamId, ParamAuthor, ParamTitle, ParamGenre, ParamPrice, ParamPublish_Date, ParamDescriptio n); return bestBook; } internalstatic BookInfo UpdateBook(BookInfo bk) { // Discounts the price of all// computer books by 20 percent.string Pa ramId = bk.ID(); string ParamAuthor = bk.Author(); string ParamTitle = bk.Title(); string ParamGenre = bk.Genre(); string ParamPrice = bk.Price(); if (ParamGenre.ToLower() == "computer") { double oldprice = Convert.ToDouble(ParamPrice); double newprice = oldprice (oldprice * .20); ParamPrice = newprice.ToString(); if (ParamPrice.IndexOf(".") == ParamPrice.Length 4) ParamPrice = ParamPrice.Substring(1, ParamPrice.Length 1); Console.WriteLine("{0} Old Price: {1}, New Price: {2}",ParamTitl e,oldprice.ToString(),ParamPrice); } string ParamPublish_Date = bk.Publish_Date(); string ParamDescription = bk.Description(); BookInfo bookUpdated = new MyBookInfo(ParamId, ParamAuthor, ParamTitle , ParamGenre, ParamPrice, ParamPublish_Date, ParamDescription); return bookUpdated; } } // Creates a BookInfo object.class MyBookInfo : BookInfo { privatestring _id; privatestring _author; privatestring _title; privatestring _genre; privatestring _price; privatestring _publish_date; privatestring _description; public MyBookInfo(string id, string author, string title, string genre, string price, string publish_date, string description) { _id = id; _author = author; _title = title; _genre = genre; _price = price; _publish_date = publish_date; _description = description; }

Pgina 23 de 26

Demonstra Passo a passo: Colees de passagem entre Hosts e suplementos

publicoverridestring ID() { return _id; } publicoverridestring Title() { return _title; } publicoverridestring Author() { return _author; } publicoverridestring Genre() { return _genre; } publicoverridestring Price() { return _price; } publicoverridestring Publish_Date() { return _publish_date; } publicoverridestring Description() { return _description; } } }

Implantando o Pipeline
Agora voc est pronto para criar e implantar os segmentos de adicionar a estrutura do diretrio de pipeline necessrios.

Para implantar os segmentos de pipeline


1. Para cada projeto na soluo, use o Build guia de Propriedades do projeto (o compilar guia Visual Basic) para definir o valor da caminho de sada (o Build output path em Visual Basic) conforme mostrado na tabela a seguir.

Project BooksAddIn

Caminho Pipeline\AddIns\CalcV1

AddInSideAdapters Pipeline\AddInSideAdapters AddInViews LibraryContracts Pipeline\AddInViews Pipeline\Contracts

Pgina 24 de 26

Demonstra Passo a passo: Colees de passagem entre Hosts e suplementos

Livraria

Pipeline (ou seu prprio diretrio de aplicativo)

HostSideAdapters Pipeline\HostSideAdapters HostViews Observao Se voc decidiu colocar seu aplicativo em um local diferente do Pipeline a pasta, certifique-se de alterar o cdigo do host que especifica o local do diretrio raiz pipeline. Pipeline (ou seu prprio diretrio de aplicativo)

2. Crie a soluo de Visual Studio. Para obter informaes sobre como implantar o pipeline, consulte Requisitos de 3 desenvolvimento de pipeline .

Executando o aplicativo Host


Agora voc est pronto para executar o host e interagir com o suplemento.

Para executar o aplicativo host


1. No prompt de comando, v para o diretrio raiz do pipeline e executar o aplicativo host.Neste exemplo, o aplicativo host BookStore.exe. 2. O host localiza todos os suplementos disponveis do seu tipo e solicita que voc selecione um add-in.Digite 1 para o suplemento s est disponvel. O host ativa o add-in e o usa para realizar vrias operaes na lista de livros. 3. Pressione qualquer tecla para fechar o aplicativo.

Consulte tambm
Tarefas Demonstra Passo a passo: Criando um aplicativo extensvel21 Demonstra Passo a passo: Ativando a compatibilidade com verses anteriores, como as alteraes 22 de Host Conceitos Requisitos de desenvolvimento de pipeline3 Contratos, exibies e adaptadores23 24 Desenvolvimento de pipeline

Tabela de Ligaes
1 2 3 4 5

http://go.microsoft.com/fwlink/?LinkId=121190 http://msdn.microsoft.com/pt-br/library/ms762271.aspx http://msdn.microsoft.com/pt-br/library/bb384240.aspx http://msdn.microsoft.com/pt-br/library/system.addin.contract.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.aspx

Pgina 25 de 26

Demonstra Passo a passo: Colees de passagem entre Hosts e suplementos

6 7 8 9

http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.addincontractattribute.aspx http://msdn.microsoft.com/pt-br/library/system.addin.contract.icontract.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.addinbaseattribute.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.contracthandle.aspx http://msdn.microsoft.com/pt-br/library/system.appdomainunloadedexception.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.collectionadapters.aspx http://msdn.microsoft.com/pt-br/library/5y536ey6.aspx http://msdn.microsoft.com/pt-br/library/bb383378.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.addinadapterattribute.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.collectionadapters.toilist.aspx http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.hostadapterattribute.aspx

10 11 12 13

14 15 16 17

http://msdn.microsoft.com/ptbr/library/system.addin.pipeline.collectionadapters.toilistcontract.aspx
18 19 20 21

http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addinstore.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addintoken.aspx http://msdn.microsoft.com/pt-br/library/system.addin.aspx http://msdn.microsoft.com/pt-br/library/bb788290.aspx http://msdn.microsoft.com/pt-br/library/bb384194.aspx http://msdn.microsoft.com/pt-br/library/bb384205.aspx http://msdn.microsoft.com/pt-br/library/bb384201.aspx

22

23

24

Contedo da Comunidade

2011 Microsoft. Todos os direitos reservados.

Pgina 26 de 26

Cenrios do Pipeline de suplemento

Este um contedo traduzido por mquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informaes.

Cenrios do Pipeline de suplemento


.NET Framework 4 O modelo de objeto de pipeline add-in fornece a flexibilidade para hospedar aplicativos e suplementos interoperar das seguintes maneiras: Compatibilidade com verses anteriores.As verses mais recentes dos hosts ou suplementos podem operar com suas contrapartes mais antigos. Isolamento.Voc pode mover um ou mais add-ins em um domnio de aplicativo no processo de host ou em um processo isolado. O compartilhamento.Voc pode usar um suplemento em vrios canais de comunicao. A ilustrao a seguir mostra um pipeline de comunicao simples e seus segmentos. Pipeline de comunicao padro

Compatibilidade com Verses Anteriores


Existem dois cenrios que demonstram a compatibilidade com verses anteriores.

Novo Host, Add-Ins antigos


A ilustrao a seguir mostra como um novo host pode trabalhar com um suplemento antigo. Pipeline de comunicao com o novo host e o antigo suplemento

Nesse cenrio de compatibilidade com verses anteriores, o novo host (Host v2) pode trabalhar com um antigo suplemento (Add-in v1) porque seu adaptador de adicionar no lado (Adicionar no lado adaptador v1 - > v2) converte os tipos em um formato que possa entender o suplemento antigo. O novo suplemento (Add-in v2) tem seus prprios segmentos de modo de exibio e o adaptador para comunicao com o novo host.

Pgina1 de 3

Cenrios do Pipeline de suplemento

Host antigo, novos suplementos


A ilustrao a seguir mostra como um host antigo pode trabalhar com novos suplementos. Canal de comunicao com o host antigo e novo suplemento

Nesse cenrio de compatibilidade com verses anteriores, o novo suplemento (Add-in v2) pode trabalhar com o antigo host (Host v1) porque seu adaptador de adicionar no lado (Adicionar no lado adaptador v2 - > v1) converte os tipos em um formato que o antigo host possa entender.

Vrios nveis de isolamento


Voc pode ativar o add-ins em um domnio de aplicativo ou um novo processo usando os mtodos 1 sobrecarregados apropriados da Activate mtodo.Esse isolamento pode ser necessrio pelas seguintes razes: Para lidar com situaes em que as alteraes de aplicativo do host e suas dependncias de novas no podem ser acomodadas por suplementos antigos.Por exemplo, isso pode acontecer quando o aplicativo host atualiza para uma nova verso do .NET Framework. Para obter confiabilidade, fazendo com que o suplemento executado em seu prprio processo. Crie uma caixa de proteo para o suplemento.Por exemplo, um aplicativo host e um add-in 2 tem diferentes nveis de confiana, conforme especificado pelo AddInSecurityLevel enumerao. A ilustrao a seguir mostra um pipeline de comunicao com dois suplementos, um dos quais est em um processo isolado.Na ilustrao, OOP indica um processo isolado. Canal de comunicao com isolado suplementos

Nesse cenrio, um desenvolvedor de pipeline tem duas verses diferentes do contrato e adaptadores: um otimizado para comunicao de entre domnios de aplicativo e o outro otimizado para comunicao entre processos.Os suplementos nem o host precisa estar ciente das diferenas porque eles usam o mesmo visualizaes independentemente do contrato e o nvel de isolamento.

Pgina2 de 3

Cenrios do Pipeline de suplemento

Suplementos compartilhados
Voc pode usar um suplemento com vrios hosts, desde que o add-in compatvel com os hosts.Por exemplo, voc pode usar um suplemento compartilhado para implementar uma barra de ferramentas que fornece uma pesquisa na Internet para um aplicativo da Web do host.Outro exemplo um suplemento compartilhado que fornece os filtros de spam e proteo contra vrus para servidores de email ou clientes de email. Para ativar o add-in operar com seu novo host, voc deve criar um novo adaptador de adicionar no lado que converte a exibio do suplemento para o contrato do host. A ilustrao a seguir mostra como um suplemento (Add-in A) pode ser compartilhado por dois aplicativos de host (Host A e b do Host). Canal de comunicao com o suplemento compartilhado

Consulte tambm
Conceitos Desenvolvimento de pipeline3

Tabela de Ligaes
1 2 3

http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addintoken.activate.aspx http://msdn.microsoft.com/pt-br/library/bb355219.aspx http://msdn.microsoft.com/pt-br/library/bb384201.aspx

Contedo da Comunidade

2011 Microsoft. Todos os direitos reservados.

Pgina3 de 3

Descoberta de suplemento

Este um contedo traduzido por mquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informaes.

Descoberta de suplemento
.NET Framework 4 Aplicativos de host podem descobrir os suplementos que esto disponveis para eles.Descoberta consiste em duas tarefas: Registrar informaes sobre todos os suplementos e pipeline segmentos em arquivos de cache. Localizando o add-ins para um modo de exibio do host especificado do add-in pesquisando o cache. Dependendo do aplicativo, o host normalmente detecta o add-ins na inicializao, quando um documento carregado, ou mediante solicitao do usurio.O AddInStore1 classe fornece mtodos para executar essas tarefas. Depois de voc ter descoberto os add-ins, voc pode ativ-las conforme descrito em Ativao de suplemento2 e Como: Ativar suplementos com nveis de segurana e isolamento de diferente3.

Registrando o Add-ins e segmentos de Pipeline


Registrando envolve determinando suplementos vlidos, verificando se os atributos de segmentos de tubulao e construir as informaes sobre as tubulaes.Para obter mais informaes sobre como aplicar atributos para segmentos de pipeline e criando a estrutura do diretrio de pipeline, 4 consulte Requisitos de desenvolvimento de pipeline .A estrutura do diretrio de pipeline pode conter os pipelines de um ou mais.Essas informaes so armazenadas em cache em dois arquivos no diretrio raiz de pipeline: PipelineSegments.store e AddIns.store. Os mtodos usados para registro de levar a uma varivel de seqncia de caracteres que representa o caminho de raiz do pipeline, ou um valor a partir de PipelineStoreLocation5 enumerao.Eles criam novos arquivos de cache, se esses arquivos no foram criados anteriormente. Os mtodos reconstruir ou atualizar os arquivos de cache, como a tabela a seguir descreve.

Mtodo de registro

Descrio

Recria o cache de segmentos do pipeline e inclui quaisquer novas adies. Rebuild


6

Esse mtodo tambm recria o cache de suplementos se suplementos estiverem dentro da estrutura do diretrio de pipeline. Recria o cache de add-ins add-ins em um local especificado.Chame este mtodo se seus suplementos esto fora da estrutura do diretrio de pipeline. Atualiza o cache de segmentos de pipeline com quaisquer adies.

RebuildAddIns

Update8

Esse mtodo tambm atualiza o cache de suplementos se suplementos estiverem dentro da estrutura do diretrio de pipeline. Se no existem novos segmentos de pipeline ou add-ins, esse mtodo simplesmente valida o cache.

Pgina 1 de 4

Descoberta de suplemento

UpdateAddIns

Atualiza o cache de add-in para qualquer novos add-ins em um local especificado.Chame este mtodo se seus suplementos esto fora da estrutura do diretrio de pipeline. Se no houver nenhum novos suplementos instalados, esse mtodo simplesmente valida o cache.

O Rebuild6 e Update8 sobrecargas do mtodo utilizam como um parmetro, um diretrio raiz da 5 estrutura do diretrio de pipeline ou um valor a partir de PipelineStoreLocation enumerao. Esses mtodos usam o carregamento de reflexo para obter informaes e no execute cdigo do add-in ou do segmento de pipeline.Informaes armazenadas em cache hora para que ele no ser recalculado durante as atualizaes.

Arquivos de cache
O resultado de chamar os mtodos de registro so os dois arquivos de cache: PipelineSegments.store Este arquivo est localizado no diretrio raiz da estrutura do diretrio de pipeline. AddIns.store Este arquivo est localizado no diretrio que contm um ou mais subpastas add-in.Este diretrio pode ser dentro da estrutura do diretrio de pipeline, ou em outro local.

Localizando o Add-Ins
O FindAddIns10 mtodo examina os arquivos de armazenamento para localizar todos os suplementos que correspondam a um modo de exibio do host especificado do add-in.O modo de exibio de host do add-in a classe base abstrata ou uma interface que descreve os mtodos usados pelo host e o suplemento, conforme especificado no contrato.Para localizar os arquivos de cache criados pelos mtodos de registro, esse mtodo usa como um parmetro de um diretrio 5 raiz da estrutura do diretrio de pipeline ou um valor a partir de PipelineStoreLocation enumerao. Observao Chame FindAddIns somente depois que voc tiver certeza de que os arquivos do armazenamento so desenvolvidos e atualizados de modo que todos os suplementos disponveis podem ser encontrados.
10

O FindAddIns mtodo retorna um IList<T> a coleo de tokens que descrevem cada 12 suplemento disponvel que tem um pipeline vlido.Cada token descrito pela AddInToken classe. Cada token possui as seguintes informaes sobre um suplemento, que obtida a partir de 13 AddInAttribute atributo de classe do suplemento: Nome Descrio Publisher Verso

10

11

Pgina 2 de 4

Descoberta de suplemento

Na maioria dos casos, existe apenas um token no IList<T> coleo.Se houver mais de um token, o aplicativo host pode usar essas informaes para ajudar o usurio a selecionar o add-in para ativar.Para obter mais informaes sobre a ativao, consulte Ativao de suplemento2. Para encontrar suplementos fora da estrutura do diretrio de pipeline, voc deve incluir o AddInPaths parmetro.Como este parmetro uma matriz de seqncias de caracteres, voc pode especificar vrios locais. Voc tambm pode encontrar um suplemento especfico com o FindAddIn uma coleo de um token.
14

11

mtodo que retorna

Exemplo
O exemplo a seguir mostra como criar os arquivos de cache e localizar suplementos.

// Get path for the pipeline root.// Assumes that the current directory is the pipeline directory structure root directory. String pipeRoot = Environment.CurrentDirectory;

//

// Update the cache files of the// pipeline segments and addins.string[] warnings = AddInStore.Update(pipeRoot); foreach (string warning in warnings) { Console.WriteLine(warning); } // Search for addins of type Calculator (the host view of the addin)// specifying the host's application base, instead of a path,// for the FindAddIns method. Collection<AddInToken> tokens = AddInStore.FindAddIns(typeof(Calculator),PipelineStoreLocation.Applicat ionBase);

Consulte tambm
Conceitos Add-ins e extensibilidade Ativao de suplemento2 4 Requisitos de desenvolvimento de pipeline 16 Contratos, exibies e adaptadores
15

Tabela de Ligaes
1 2 3 4 5 6

http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addinstore.aspx http://msdn.microsoft.com/pt-br/library/bb384212.aspx http://msdn.microsoft.com/pt-br/library/bb384196.aspx http://msdn.microsoft.com/pt-br/library/bb384240.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.pipelinestorelocation.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addinstore.rebuild.aspx

Pgina 3 de 4

Descoberta de suplemento

7 8 9

http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addinstore.rebuildaddins.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addinstore.update.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addinstore.updateaddins.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addinstore.findaddins.aspx http://msdn.microsoft.com/pt-br/library/5y536ey6.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addintoken.aspx http://msdn.microsoft.com/pt-br/library/system.addin.addinattribute.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addinstore.findaddin.aspx http://msdn.microsoft.com/pt-br/library/bb384200.aspx http://msdn.microsoft.com/pt-br/library/bb384205.aspx

10 11 12 13 14 15

16

Contedo da Comunidade
2011 Microsoft. Todos os direitos reservados.

Pgina 4 de 4

Ativao de suplemento

Este um contedo traduzido por mquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informaes.

Ativao de suplemento
.NET Framework 4 Depois que voc tenha usado os mtodos de descoberta e obteve uma coleo de tokens de add-in para um modo de exibio do host especificado, voc pode ativar um suplemento da coleo usando 1 seu token, que representado por um AddInToken objeto.Para obter mais informaes sobre como descobrir os suplementos que esto disponveis no seu sistema, consulte Descoberta de 2 suplemento . Quando voc usa o Activate sobrecargas do mtodo em um AddInToken o objeto, voc pode especificar as seguintes opes de ativao: O domnio de aplicativo que o suplemento carregado no. O segurana permisso ou nvel de conjunto de confiana que concedido para o domnio de aplicativo criado para o suplemento. O processo externo no qual ativar o add-in.Essa uma opo de desenvolvimento avanado de suplemento. O Activate3 mtodo retorna o modo de exibio de host do add-in; o aplicativo host pode ento chamar mtodos, conforme definido no contrato.O aplicativo host pode controlar a vida til do 4 suplemento deslig-lo com o AddInController classe.Ele tambm pode permitir que o coletor de lixo recuperar o suplemento quando ele no mais consultado.
3 1

Ativao
Normalmente, os aplicativos de host mantm o host e o suplemento executando em domnios de aplicativo separado, com um domnio do aplicativo por suplemento.Isso permite que os suplementos operar em contextos isolados de tanto o host e de outros suplementos.Esse isolamento evita conflitos e permite o controle de verso de suplementos. Como o suplemento est em seu prprio domnio de aplicativo, voc pode test-lo em seu prprio ambiente e tambm testar seu lado do pipeline.O adaptador suplementar, o contrato e segmentos de tubulao de add-in visualizao so carregados no mesmo domnio de aplicativo, como o suplemento.Quaisquer outros assemblies exigidos pelo suplemento tambm so carregados no domnio de aplicativo do suplemento. Ao ativar um add-ins, o aplicativo host normalmente usa o Activate a sobrecarga de mtodo que leva a um nvel de segurana especificados e que automaticamente cria um domnio de aplicativo 5 6 do add-in.Voc pode especificar um AddInSecurityLevel ou PermissionSet para o nvel de 3 segurana.Quando o Activate mtodo cria um domnio de aplicativo para o suplemento, ele define o arquivo de configurao do domnio de aplicativo para ser addinassemblyname.config, se o arquivo de configurao existe. Para obter um controle ou suplementos do pool, voc pode usar sobrecargas da 3 AddInToken.Activate mtodo para especificar um domnio de aplicativo existente para carregamento add-ins.Se voc especificar um domnio de aplicativo existente, voc pode facilmente compartilhar informaes de cultura, contextos de segurana e recursos com outros suplementos. Voc deve considerar o contexto de segurana ser aplicado ao domnio de aplicativo do suplemento.Por exemplo, um aplicativo host pode estar sendo executado em confiana total, mas talvez precise executar suplementos com menos permisses.Voc pode usar sobrecargas da 3 5 Activate mtodo para especificar uma zona de segurana com o AddInSecurityLevel enumerao.Essas zonas de segurana incluem FullTrust, Host5, Intranet, ou Internet.As
3

Pgina 1 de 3

Ativao de suplemento

permisses apropriadas para a zona de segurana so aplicadas ao cdigo que est sendo executado em um domnio do aplicativo.As permisses disponveis para essas zonas de segurana dependem existentes.Configuraes de segurana do NET Framework. Se voc no deseja usar permisses para uma zona de segurana, voc pode usar sobrecargas da Activate3 mtodo para fornecer sua prpria PermissionSet6 objeto. Voc pode usar sobrecargas da Activate3 mtodo para criar um processo externo para o suplemento ou anexar o add-in para um processo externo existente, que foi criado para o host add 7 8 -ins.Essas sobrecargas usam o AddInProcess e AddInEnvironment classes.Para obter mais informaes sobre como ativar add-ins em um processo externo, consulte Como: Ativar 9 suplementos com nveis de segurana e isolamento de diferente .

Suplemento de controle de tempo de vida


O AddInController4 classe fornece mtodos para as seguintes tarefas de suplemento: Desligue o add-in. Obtenha domnio de aplicativo do add-in. Obter um token do add-in para ativao futura. Obtenha um AddInEnvironment8 o objeto para uso com a ativao de processo externo. Use o GetAddInController10 mtodo para obter o controlador para um especificado add-in. O Shutdown11 mtodo manipula os detalhes necessrios para desligar um add-in.Esses incluem saber onde o suplemento carregado, seu domnio de aplicativo e possivelmente os processos externos, add-in executado.Se o domnio do aplicativo foi criado automaticamente, esse mtodo descarrega o domnio do aplicativo.Se o suplemento foi ativado em um domnio do aplicativo especificado, o servio de tempo de vida do objeto remoto contrato ser a hora de sada, o que deixa o domnio de aplicativo carregado.Quando o objeto do contrato descartado, o suplemento estar disponvel para ser recuperados pela coleta de lixo.

Exemplo
O exemplo a seguir ativa um add-in com um nvel de segurana especificados em um domnio de aplicativo criados automaticamente.

//Ask the user which addin they would like to use. AddInToken selectedToken = ChooseAddIn(tokens); //Activate the selected AddInToken in a new//application domain with the Internet t rust level. Calculator CalcAddIn = selectedToken.Activate<Calculator>(AddInSecurityLevel.Intern et); //Run the addin using a custom method. RunCalculator(CalcAddIn);

Consulte tambm
Tarefas Como: Ativar suplementos com nveis de segurana e isolamento de diferente
9

Pgina 2 de 3

Ativao de suplemento

Conceitos Add-ins e extensibilidade12 2 Descoberta de suplemento 13 Gerenciamento da vida til Contratos, exibies e adaptadores14

Tabela de Ligaes
1 2 3 4 5 6 7 8 9

http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addintoken.aspx http://msdn.microsoft.com/pt-br/library/bb384188.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addintoken.activate.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addincontroller.aspx http://msdn.microsoft.com/pt-br/library/bb355219.aspx http://msdn.microsoft.com/pt-br/library/system.security.permissionset.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addinprocess.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addinenvironment.aspx http://msdn.microsoft.com/pt-br/library/bb384196.aspx

10

http://msdn.microsoft.com/ptbr/library/system.addin.hosting.addincontroller.getaddincontroller.aspx
11 12

http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addincontroller.shutdown.aspx http://msdn.microsoft.com/pt-br/library/bb384200.aspx http://msdn.microsoft.com/pt-br/library/bb384186.aspx http://msdn.microsoft.com/pt-br/library/bb384205.aspx

13

14

Contedo da Comunidade
2011 Microsoft. Todos os direitos reservados.

Pgina 3 de 3

Suplemento de desempenho

Este um contedo traduzido por mquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informaes.

Suplemento de desempenho
.NET Framework 4 Suplemento de desempenho pode ser melhorado por meio de carregamento de domnio neutro para o contrato de pipeline.A ativao pode ser melhorada por meio da gerao de imagens nativas para segmentos de pipeline.

Carregamento de domnio neutro melhora chamadas entre domnios


Quando um suplemento carregado em um domnio de aplicativo separado, chamadas entre o host e o suplemento so empacotadas em limites de domnio do aplicativo pelo pipeline.O desempenho dessas chamadas entre domnios significativamente aperfeioado se o assembly que contm o contrato for carregado como domnio neutro. O assembly deve ter um nome forte e deve ser instalado no cache global de assemblies e ele deve 1 ter o LoaderOptimizationAttribute com um a LoaderOptimization.MultiDomainHost sinalizador ou o LoaderOptimization.MultiDomain sinalizador.

Evitar o compilador JIT melhora a ativao


Compilador just-in-time (JIT) adiciona substancialmente a sobrecarga de desempenho de ativao do suplemento, especialmente quando o suplemento ativado em um domnio de aplicativo separado.Para evitar o uso do compilador JIT, siga estas diretrizes: Dar nomes fortes de mdulos (assemblies) do pipeline e instale-os no cache global de assemblies. Use o NGen (Native Image Generator)2 para criar imagens nativas para assemblies de pipeline. Certifique-se de que o assembly que contm o contrato carregado como domnio neutro, conforme descrito na seo anterior. Observao Esse ponto extremamente importante.Se o contrato no for carregado como domnio neutro, nenhum dos componentes adicionar no lado pode usar imagens nativas.

Aplicar o LoaderOptimizationAttribute para o assembly do host com um a MultiDomainHost sinalizador ou o MultiDomain sinalizador, para permitir que as imagens nativas da .NET Framework conjuntos de mdulos podem ser compartilhadas entre domnios de aplicativo. Observao Essa melhoria de desempenho no ser detectvel quando executando sob o depurador, porque o processo de hospedagem (vshost.exe) no est definido para o compartilhamento de assembly.Voc pode desativar o processo de hospedagem, mas isso no recomendado.No deve ser medido o desempenho quando executando sob o depurador.

Pgina 1 de 2

Suplemento de desempenho

Consulte tambm
Referncia LoaderOptimizationAttribute 3 LoaderOptimization 2 NGen (Native Image Generator) Conceitos Domnios de Aplicativos e Assemblies
4 1

Tabela de Ligaes
1 2 3 4

http://msdn.microsoft.com/pt-br/library/system.loaderoptimizationattribute.aspx http://msdn.microsoft.com/pt-br/library/6t9t5wcf.aspx http://msdn.microsoft.com/pt-br/library/system.loaderoptimization.aspx http://msdn.microsoft.com/pt-br/library/43wc4hhs.aspx

Contedo da Comunidade
2011 Microsoft. Todos os direitos reservados.

Pgina 2 de 2

Como: Ativar suplementos com nveis de segurana e isolamento de diferente

Este um contedo traduzido por mquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informaes.

Como: Ativar suplementos com nveis de segurana e isolamento de diferente


.NET Framework 4 Voc pode ativar um add-in usando configuraes de processo e de domnio de aplicativo diferente 1 para atender s suas necessidades de segurana e isolamento.O Activate sobrecargas do mtodo da 2 AddInToken classe fornecer as seguintes opes para ativar um add-in: Em seu prprio domnio de aplicativo, que gerado automaticamente pelo sistema. Em um aplicativo domnio existente, com ou sem outros suplementos. No mesmo ambiente (domnio de aplicativo e processo) como outro suplemento. Um novo processo externo que separado do processo do host.O novo processo pode incluir outros suplementos que compartilham esse processo. Quando voc ativa um add-in em um novo domnio de aplicativo ou processo, voc deve especificar um nvel de segurana, usando um AddInSecurityLevel3 ou PermissionSet4 objeto.Para obter mais 5 informaes sobre como ativar add-ins, consulte Ativao de suplemento . Os procedimentos a seguir mostram como implementar essas opes de ativao usando o Activate sobrecargas do mtodo.Os exemplos assumem que foram criados os caches de segmento e o 2 suplemento do pipeline e que um ou mais add-ins foi encontrados e retornados em um AddInToken coleo denominada tokens.Para obter mais informaes sobre como criar arquivos de cache e 6 localizar add-ins, consulte Descoberta de suplemento .
1

Para ativar um add-in em um novo domnio de aplicativo


Use o Activate<T>(AddInSecurityLevel) ou Activate<T>(PermissionSet) sobrecarga do mtodo.
7 8

//Ask the user which addin they would like to use. AddInToken selectedToken = ChooseAddIn(tokens); //Activate the selected AddInToken in a new//application domain with the Interne t trust level. Calculator CalcAddIn = selectedToken.Activate<Calculator>(AddInSecurityLevel.Int ernet); //Run the addin using a custom method. RunCalculator(CalcAddIn);

Para ativar um add-in no mesmo domnio do aplicativo como outro suplemento


Use o Activate<T>(AppDomain)9 sobrecarga do mtodo.

// Get the application domain// of an existing addin (CalcAddIn). AddInController aiCtrl = AddInController.GetAddInController(CalcAddIn);

Pgina 1 de 3

Como: Ativar suplementos com nveis de segurana e isolamento de diferente

AppDomain AddInAppDom = aiCtrl.AppDomain; // Activate another addin in the same application domain. Calculator CalcAddIn3 = selectedToken2.Activate<Calculator>(AddInAppDom); // Show that CalcAddIn3 was loaded// into CalcAddIn's application domain. AddInController aic = AddInController.GetAddInController(CalcAddIn3); Console.WriteLine("Addin loaded into existing application domain: {0}", aic.AppDomain.Equals(AddInAppDom));

Para ativar um add-in no mesmo domnio de aplicativo e processo de outro suplemento


Use o Activate<T>(AddInEnvironment)10 sobrecarga do mtodo.

// Get the AddInController of a // currently actived addin (CalcAddIn). AddInController aiController = AddInController.GetAddInController(CalcAddIn); // Select another token. AddInToken selectedToken2 = ChooseAddIn(tokens); // Activate a second addin, CalcAddIn2, in the same// appliation domain and pro cess as the first addin by passing// the first addin's AddInEnvironment object to the Activate method. AddInEnvironment aiEnvironment = aiController.AddInEnvironment; Calculator CalcAddIn2 = selectedToken2.Activate<Calculator>(aiEnvironment); // Get the AddInController for the second addin to compare environments. AddInController aiController2 = AddInController.GetAddInController(CalcAddIn2); Console.WriteLine("Addins in same application domain: {0}", aiController.AppDom ain.Equals(aiController2.AppDomain)); Console.WriteLine("Addins in same process: {0}", aiEnvironment.Process.Equals(a iController2.AddInEnvironment.Process));

Para ativar um add-in em um novo processo.


Use o Activate<T>(AddInProcess, AddInSecurityLevel) PermissionSet)12 sobrecarga do mtodo.
11

ou Activate<T>(AddInProcess,

// Create an external process. AddInProcess pExternal = new AddInProcess(); // Activate an addin in the external process// with a full trust security level . Calculator CalcAddIn4 = selectedToken.Activate<Calculator>(pExternal, AddInSecurityLevel.FullTrust); // Show that the addin is an an external process// by verifying that it is not in the current (host's) process. AddInController AddinCtl = AddInController.GetAddInController(CalcAddIn4); Console.WriteLine("Addin in host's process: {0}",

Pgina 2 de 3

Como: Ativar suplementos com nveis de segurana e isolamento de diferente

AddinCtl.AddInEnvironment.Process.IsCurrentProcess);

Consulte tambm
Conceitos Descoberta de suplemento6 13 Experincia do desenvolvedor de suplemento 14 Add-ins e extensibilidade

Tabela de Ligaes
1 2 3 4 5 6 7 8 9

http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addintoken.activate.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addintoken.aspx http://msdn.microsoft.com/pt-br/library/bb355219.aspx http://msdn.microsoft.com/pt-br/library/system.security.permissionset.aspx http://msdn.microsoft.com/pt-br/library/bb384212.aspx http://msdn.microsoft.com/pt-br/library/bb384188.aspx http://msdn.microsoft.com/pt-br/library/bb337554.aspx http://msdn.microsoft.com/pt-br/library/bb341782.aspx http://msdn.microsoft.com/pt-br/library/bb298165.aspx http://msdn.microsoft.com/pt-br/library/bb351286.aspx http://msdn.microsoft.com/pt-br/library/bb292114.aspx http://msdn.microsoft.com/pt-br/library/bb299248.aspx http://msdn.microsoft.com/pt-br/library/bb384171.aspx http://msdn.microsoft.com/pt-br/library/bb384200.aspx

10

11

12

13

14

Contedo da Comunidade
2011 Microsoft. Todos os direitos reservados.

Pgina 3 de 3

Como: Usar dados de qualificao

Este um contedo traduzido por mquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informaes.

Como: Usar dados de qualificao


.NET Framework 4 Voc pode atribuir dados de qualificao para um segmento de pipeline para qualquer propsito, 1 aplicando um ou mais QualificationDataAttribute atributos para o segmento.Cada atributo especifica um par nome/valor simples de dados de seqncia de caracteres.Por exemplo, voc pode indicar que um add-in deve ser ativado com confiana total, especificando o par nome/valor "Segurana" e "fulltrust".Da mesma forma, voc pode indicar que um segmento de pipeline deve ser isolado em seu prprio processo especificando o par nome/valor "Isolamento" e "newprocess".

Para aplicar a qualificao de dados a um segmento de pipeline


Use o QualificationDataAttribute1 atributo.

// This pipeline segment has// two attributes:// 1 An AddInAttribute to identi fy// this segment as an addin.//// 2 A QualificationDataAttribute to// indicate that the addin should// be loaded into a new application domain. [AddIn("Calculator Addin",Version="2.0.0.0")] [QualificationData("Isolation", "NewAppDomain")] publicclass SampleV2AddIn : Calculator2 {

Para determinar os dados de qualificao para um segmento especfico de pipeline


Use o QualificationData propriedade em um AddInToken objeto para obter um dicionrio de segmentos e seus dados de qualificao associados com o token e em seguida, use o 4 apropriado AddInSegmentType valor de um dicionrio que contm os pares nome/valor que constituem os dados de qualificao para o segmento desejado.
2 3

// Use qualification data to control // how an addin should be activated.if (se lectedToken.QualificationData[AddInSegmentType.AddIn]["Isolation"].Equals("NewPr ocess")) { // Create an external process. AddInProcess external = new AddInProcess(); // Activate an addin in the new process// with the full trust security leve l. Calculator CalcAddIn5 = selectedToken.Activate<Calculator>(external, AddInSecurityLevel.FullTrust); Console.WriteLine("Addin activated per qualification data."); } else Console.WriteLine("This addin is not designated to be activated in a ne w process.");

Pgina 1 de 3

Como: Usar dados de qualificao

Se no houver nenhum dado de qualificao para um segmento, o seu dicionrio de pares nome/valor est vazio. Observao O modelo de suplemento no usa dados de qualificao so aplicados ao modo de exibio de host do add-in.Como resultado, o dicionrio para AddInSegmentType.HostViewOfAddIn4 est sempre vazio.

Para listar os dados de qualificao para todos os segmentos de pipeline


Enumerar o AddInToken de objeto como se fosse uma coleo de QualificationDataItem estruturas.
3 5

// Show the qualification data for each// token in an AddInToken collection.fore ach (AddInToken token in tokens) { foreach (QualificationDataItem qdi in token) { Console.WriteLine("{0} {1}\n\t QD Name: {2}, QD Value: {3}", token.Name, qdi.Segment, qdi.Name, qdi.Value); } }

Observao O modelo de suplemento no usa dados de qualificao so aplicados ao modo de exibio de host do add-in.Como resultado, quando voc enumerar a qualificao de dados, voc no encontrar os itens cuja Segment6 a propriedade 4 AddInSegmentType.HostViewOfAddIn .

Consulte tambm
Conceitos Add-ins e extensibilidade
7

Tabela de Ligaes
1 2 3 4

http://msdn.microsoft.com/pt-br/library/system.addin.pipeline.qualificationdataattribute.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addintoken.qualificationdata.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addintoken.aspx http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addinsegmenttype.aspx

Pgina 2 de 3

Como: Usar dados de qualificao

5 6

http://msdn.microsoft.com/pt-br/library/system.addin.hosting.qualificationdataitem.aspx

http://msdn.microsoft.com/ptbr/library/system.addin.hosting.qualificationdataitem.segment.aspx
7

http://msdn.microsoft.com/pt-br/library/bb384200.aspx

Contedo da Comunidade
2011 Microsoft. Todos os direitos reservados.

Pgina 3 de 3

Experincia do desenvolvedor de suplemento

Este um contedo traduzido por mquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informaes.

Experincia do desenvolvedor de suplemento


.NET Framework 4 Normalmente, h trs grupos de desenvolvedores que trabalham em suplementos e suas tubulaes: os desenvolvedores de aplicativos de host, os desenvolvedores de pipeline e desenvolvedores. Normalmente, as empresas que desenvolvem aplicativos host tambm desenvolver um SDK que descreve o modelo de objeto para os desenvolvedores de suplemento de programar.Esse SDK incluir o assembly de exibio do suplemento que contm a classe base abstrata ou a interface que o suplemento deve implementar, bem como classes base abstratas e interfaces que representam os tipos que so passados entre o host e o suplemento.Esse trabalho tambm pode incluir criando o pipeline completo.

Add-in Development
H apenas alguns requisitos para a classe que define um add-in: A classe deve ter o AddInAttribute atributo.Este atributo especifica o nome do suplemento e, opcionalmente, uma descrio, o publisher e a verso. A classe deve derivar de suplemento classe base no modo de exibio add-in. A classe deve implementar os mtodos da classe base add-in. Fora desses requisitos, desenvolver um add-in como o desenvolvimento de qualquer outro.Componente NET Framework.No necessrio entender os detalhes do pipeline.O desenvolvedor do suplemento deve implementar apenas os mtodos no modo de exibio add-in. O desenvolvedor do suplemento tambm pode desenvolver e testar suplementos sem afetar outros suplementos ou no host, porque o suplemento seja isolado em seu prprio domnio de aplicativo.Somente a exibio do suplemento, o contrato e os adaptadores de adicionar no lado so carregados para o domnio de aplicativo do suplemento. Implantao simples. tudo o que necessrio copiar o assembly de add-in para sua prpria pasta no suplemento diretrio especificado pelo host.Muitos hosts escolher chamar o Update2 mtodo prprios, o que torna a implantao de adicionar uma operao de cpia simples.Outros far com que essa responsabilidade ao suplemento desenvolvedores.Nesse caso, o suplemento normalmente chamar o assembly addinutil.exe fornecido no diretrio framework durante a instalao.
1

Consulte tambm
Conceitos Add-ins e extensibilidade 4 Desenvolvimento de pipeline Requisitos de desenvolvimento de pipeline5 6 Contratos, exibies e adaptadores 7 Descoberta de suplemento
3

Tabela de Ligaes
1

http://msdn.microsoft.com/pt-br/library/system.addin.addinattribute.aspx

Pgina 1 de 2

Experincia do desenvolvedor de suplemento

2 3 4 5 6 7

http://msdn.microsoft.com/pt-br/library/system.addin.hosting.addinstore.update.aspx http://msdn.microsoft.com/pt-br/library/bb384200.aspx http://msdn.microsoft.com/pt-br/library/bb384201.aspx http://msdn.microsoft.com/pt-br/library/bb384240.aspx http://msdn.microsoft.com/pt-br/library/bb384205.aspx http://msdn.microsoft.com/pt-br/library/bb384188.aspx

Contedo da Comunidade
2011 Microsoft. Todos os direitos reservados.

Pgina 2 de 2

Вам также может понравиться