Академический Документы
Профессиональный Документы
Культура Документы
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 .
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 .
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
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
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.
Voltar ao topo
Referncia
System.AddIn
1
System.AddIn.Contract System.AddIn.Hosting
2
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
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 .
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.
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
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
Pgina 5 de 5
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 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
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
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.
mtodo.
Pgina 3 de 6
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 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.
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
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.
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
12
13 14 15 16
17
Contedo da Comunidade
Pgina 6 de 6
Este um contedo traduzido por mquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informaes.
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
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
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
14 15 16 17 18 19
20
Contedo da Comunidade
Pgina 3 de 3
Este um contedo traduzido por mquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informaes.
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
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
Contedo da Comunidade
2011 Microsoft. Todos os direitos reservados.
Pgina 2 de 2
Este um contedo traduzido por mquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informaes.
Pr-requisitos
Voc precisa fazer o seguinte para concluir este passo a passo: Visual Studio.
Usar uma soluo em Visual Studio para conter projetos dos seus segmentos de pipeline.
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 .
Pgina 2 de 15
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.
Pgina 3 de 15
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); } }
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); } }
Pgina 4 de 15
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
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); } } }
Pgina 6 de 15
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
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); } } }
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.
Pgina 8 de 15
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.
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
} 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
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
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.
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
{ 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; } } }
Implantando o Pipeline
Agora voc est pronto para criar e implantar os segmentos de adicionar a estrutura do diretrio de pipeline necessrios.
Project AddInCalcV1
Caminho MyApp\Pipeline\AddIns\CalcV1
Pgina 13 de 15
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.
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
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.
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 .
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.
namespace CalcAddInViews { [AddInBase] publicabstractclass Calculator2 { publicabstractstring Operations { get; } publicabstractdouble Operate(string operation, double a, double b); } }
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.
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.
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.
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
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); } } } }
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.
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.
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.
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(); } } }
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.
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
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.
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 .
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
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
Este um contedo traduzido por mquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informaes.
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
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 .
Pgina 2 de 26
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.
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
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.
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
using System; namespace LibraryContractsBase { publicabstractclass BookInfo { publicabstractstring publicabstractstring publicabstractstring publicabstractstring publicabstractstring publicabstractstring publicabstractstring } } ID(); Author(); Title(); Genre(); Price(); Publish_Date(); Description();
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
publicabstractclass BookInfo { publicabstractstring publicabstractstring publicabstractstring publicabstractstring publicabstractstring publicabstractstring publicabstractstring } } ID(); Author(); Title(); Genre(); Price(); Publish_Date(); Description();
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
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.
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
{ _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
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
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
} 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); } } } }
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
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.
Pgina 12 de 26
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(); }
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.
Pgina 13 de 26
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.
Pgina 14 de 26
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.
Pgina 15 de 26
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
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) .
Pgina 17 de 26
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
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
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
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; } } }
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.
Pgina 21 de 26
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
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
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
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.
Project BooksAddIn
Caminho Pipeline\AddIns\CalcV1
Pgina 24 de 26
Livraria
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 .
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
Pgina 25 de 26
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
22
23
24
Contedo da Comunidade
Pgina 26 de 26
Este um contedo traduzido por mquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informaes.
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
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.
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
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
Contedo da Comunidade
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.
Mtodo de registro
Descrio
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
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
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 .
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
10
http://msdn.microsoft.com/ptbr/library/system.addin.hosting.addincontroller.getaddincontroller.aspx
11 12
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.
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
Contedo da Comunidade
2011 Microsoft. Todos os direitos reservados.
Pgina 2 de 2
Este um contedo traduzido por mquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informaes.
//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);
// Get the application domain// of an existing addin (CalcAddIn). AddInController aiCtrl = AddInController.GetAddInController(CalcAddIn);
Pgina 1 de 3
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));
// 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));
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
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
Este um contedo traduzido por mquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informaes.
// 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 {
// 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
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.
// 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
Pgina 2 de 3
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
Este um contedo traduzido por mquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informaes.
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
2 3 4 5 6 7
Contedo da Comunidade
2011 Microsoft. Todos os direitos reservados.
Pgina 2 de 2