Fornecendo automação para VSPackages
Há duas maneiras principais de fornecer automação para seus VSPackages: implementando objetos específicos do VSPackage e implementando objetos de automação padrão. Geralmente, eles são usados em conjunto para estender o modelo de automação do ambiente.
Objetos específicos do VSPackage
Determinados locais dentro do modelo de automação exigem que você forneça objetos de automação exclusivos para seu VSPackage. Por exemplo, novos projetos exigem objetos distintos que somente o VSPackage fornece. Os nomes desses objetos são inseridos no registro e obtidos por meio de chamadas para o objeto de ambiente DTE
.
Objetos específicos do VSPackage também podem ser obtidos quando um consumidor de automação usa o objeto fornecido por meio da propriedade Object de um objeto padrão. Por exemplo, o objeto padrão Window
tem uma Object
propriedade, conhecida comumente como Windows.Object
propriedade. Quando os consumidores chamam o em uma janela implementada Window.Object
em seu VSPackage, você passa de volta um objeto de automação específico de seu próprio design.
Projetos
Os VSPackages podem estender o modelo de automação para novos tipos de projeto por meio de seus próprios objetos específicos do VSPackage. O objetivo principal de fornecer novos objetos de automação para seu VSPackage é diferenciar seus objetos de projeto exclusivos de um VCProject ou um VSProject2 objeto. Essa diferenciação é útil quando você deseja fornecer uma maneira de destacar ou iterar seu tipo de projeto além de outros tipos de projeto, caso eles apareçam lado a lado em uma solução. Para obter mais informações, consulte Expondo objetos de projeto.
Eventos
A arquitetura de eventos do ambiente oferece outro local para você anexar seus próprios objetos específicos do VSPackage. Por exemplo, criando seus próprios objetos de evento exclusivos, você pode estender o modelo de evento do ambiente para projetos. Talvez você queira fornecer seus próprios eventos quando um novo item for adicionado ao seu próprio tipo de projeto. Para obter mais informações, consulte Expondo eventos.
Objetos de janela
O Windows pode passar um objeto de automação específico do VSPackage de volta para o ambiente quando chamado. Você implementa um objeto derivado de IVsExtensibleObject, ou IDispatch
que devolve propriedades, IExtensibleObject estendendo o objeto de janela no qual ele está localizado. Por exemplo, você pode usar essa abordagem para fornecer automação para um controle localizado em uma moldura de janela. A semântica deste objeto e de quaisquer outros objetos que ele possa estender são seus para projetar. Para obter mais informações, consulte Como: Fornecer automação para Windows.
Páginas de opções no menu Ferramentas
Você pode criar páginas para estender o modelo de automação Ferramentas, Opções por meio da implementação de páginas e da adição de informações ao Registro para criar suas próprias opções. Suas páginas podem ser chamadas por meio do modelo de objeto de ambiente como qualquer outra página de opções. Se o design do recurso que você está adicionando ao ambiente por meio do VSPackages exigir páginas de opções, você também deverá adicionar o suporte à automação. Para obter mais informações, consulte Suporte de automação para páginas de opções.
Objetos de automação padrão
Para estender a automação para projetos, você também implementa objetos de automação padrão (derivados de ) que ficam ao lado dos outros objetos de IDispatch
projeto e implementa métodos e propriedades padrão. Exemplos de objetos padrão incluem os objetos de projeto que são inseridos na hierarquia de solução, como Projects
, Project
, ProjectItem
e ProjectItems
. Cada novo tipo de projeto deve implementar esses objetos (e possivelmente outros, dependendo da semântica do seu projeto).
Em certo sentido, esses objetos fornecem a vantagem oposta dos objetos de projeto específicos do VSPackage. Os objetos de automação padrão permitem que seu projeto seja usado de forma generalizada como qualquer outro projeto que ofereça suporte aos mesmos objetos. Assim, um suplemento que é escrito em geral Project
e ProjectItem
objetos pode funcionar contra projetos de qualquer tipo. Para obter mais informações, consulte Modelagem de projeto.