Partilhar via


A criação de instâncias do projeto usando fábricas de projeto

Tipos de projeto Visual Studio usar um a fábrica de projeto para criar instâncias de objetos do projeto. Uma fábrica de projeto é semelhante a uma fábrica de classes padrão para objetos de COM cocreatable. No entanto, os objetos do projeto não são cocreatable: só podem ser criados usando uma fábrica de projeto.

O Visual Studio IDE chama a fábrica de projeto implementada no seu VSPackage quando um usuário carrega um projeto existente ou cria um novo projeto em Visual Studio. O novo objeto de projeto fornece o IDE com informações suficientes para preencher o Solution Explorer. O novo objeto de projeto também fornece as interfaces necessárias para oferecer suporte a todas as ações relevantes de interface do usuário iniciadas pelo IDE.

Você pode implementar a IVsProjectFactory interface em uma classe em seu projeto. Normalmente, ele reside no seu próprio módulo.

Para obter um exemplo de uma implementação da IVsProjectFactory interface, consulte a PrjFac.cpp que está contido na Basic Project diretório de amostra.

Projetos que oferecem suporte a que está sendo agregada por um proprietário devem manter uma tecla de proprietário em seu arquivo de projeto. Quando o CreateProject método é chamado em um projeto com uma chave do proprietário, o projeto pertencente a converte a sua chave do proprietário em uma fábrica de projeto GUID, em seguida, chama o CreateProject método nesta fábrica de projeto para fazer a criação real.

Criando um projeto de propriedade

Um proprietário cria um projeto de propriedade em duas fases:

  1. Chamando o PreCreateForOwner método. Isso dá a oportunidade de criar um objeto de projeto agregado com base em que o controle de entrada de projeto pertencente a IUnknown. O projeto de propriedade passa interno IUnknown e o objeto agregado ao projeto proprietário. Isso dá uma chance armazenar interno de projeto pertencente a IUnknown.

  2. Chamando o InitializeForOwner método. O projeto pertencente oferece todas as sua instanciação quando este método é chamado em vez de chamada IVsProjectFactory::CreateProject como seria o caso de projetos que não são de propriedade. A entrada VSOWNEDPROJECTOBJECT enumeração é normalmente o projeto pertencente a agregado. O projeto pertencente a pode utilizar essa variável para determinar se seu objeto de projeto já foi criado (cookie não é igual a nulo) ou devem ser criados (cookie é igual a nulo).

Tipos de projeto são identificados por um GUID, semelhante a CLSID do objeto COM cocreatable de projeto exclusivo. Normalmente, as alças de fábrica de um projeto, criando instâncias de um tipo de projeto único, embora seja possível ter uma fábrica de projeto tratar mais de um GUID de tipo de projeto.

Tipos de projeto são associados uma extensão de nome de arquivo específico. Quando um usuário tenta abrir um arquivo de projeto existente ou tenta criar um novo projeto por meio da clonagem de um modelo, o IDE usa a extensão do arquivo para determinar o GUID de projeto correspondente.

Assim que o IDE determina que se ele deve criar um novo projeto ou abrir um projeto existente de um determinado tipo, o IDE usa as informações no registro do sistema em [HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\8.0\Projects] para encontrar qual VSPackage implementa a fábrica de projetos necessários. O IDE carrega esse VSPackage. No SetSite método, o VSPackage deve registrar sua fábrica de projeto no IDE, chamando o RegisterProjectType método.

O principal método da IVsProjectFactory interface é CreateProject que deve lidar com dois cenários: Abrindo um projeto existente e criar um novo projeto. A maioria dos projetos armazenar o estado do projeto em um arquivo de projeto. Normalmente, os novos projetos são criados pela tomada de uma cópia do arquivo de modelo é passada para o CreateProject método e abrindo a cópia. Projetos existentes são instanciados pelo diretamente a abrir o arquivo de projeto passado para CreateProject método. O CreateProject método pode exibir os recursos adicionais de interface do usuário para o usuário conforme necessário.

Um projeto pode também não usar nenhum arquivo e, em vez disso, armazene o estado do seu projeto em um mecanismo de armazenamento diferente, por exemplo, o sistema de arquivos, como, por exemplo, um banco de dados ou um servidor Web. Nesse caso, o parâmetro de nome de arquivo são passadas para o CreateProject método não é realmente um caminho de sistema de arquivos, mas uma seqüência de caracteres exclusiva — uma URL — para identificar os dados do projeto. Você não precisa copiar os arquivos de modelo são passados para CreateProject para acionar a seqüência apropriada de construção a ser executado.

Consulte também

Referência

IVsOwnedProjectFactory

IVsProjectFactory

IVsRegisterProjectTypes

Conceitos

Lista de verificação: Criação de novos tipos de projeto