Vytváření instancí projektu pomocí objektů pro vytváření projektů

Typy projektů v sadě Visual Studio používají objekt pro vytváření projektů k vytváření instancí objektů projektu. Objekt pro vytváření projektů je podobný objektu standardní třídy pro objekty MODELU COM. Objekty projektu však nejsou společné; Lze je vytvořit pouze pomocí projektové továrny.

Integrované vývojové prostředí sady Visual Studio volá projektovou továrnu implementovanou v balíčku VSPackage, když uživatel načte existující projekt nebo vytvoří nový projekt v sadě Visual Studio. Nový objekt projektu poskytuje integrované vývojové prostředí (IDE) dostatek informací k naplnění Průzkumník řešení. Nový objekt projektu také poskytuje požadovaná rozhraní pro podporu všech relevantních akcí uživatelského rozhraní iniciovaných integrovaným vývojovém prostředím.

Rozhraní můžete implementovat IVsProjectFactory ve třídě v projektu. Obvykle se nachází ve vlastním modulu.

Projekty, které podporují agregaci vlastníkem, musí v souboru projektu zachovat klíč vlastníka. Když je CreateProject volána metoda v projektu s klíčem vlastníka, vlastněný projekt převede jeho klíč vlastníka na identifikátor GUID objektu pro vytváření projektů a pak zavolá metodu CreateProject v této objektu pro vytváření projektu k provedení skutečného vytvoření.

Vytvoření vlastněného projektu

Vlastník vytvoří vlastněný projekt ve dvou fázích:

  1. Voláním PreCreateForOwner metody. To dává vlastněný projekt šanci vytvořit agregovaný projekt objekt založený na ovládacím prvku IUnknownvstupu . Vlastněný projekt předá vnitřní IUnknown a agregovaný objekt zpět do projektu vlastníka. Díky tomu má vlastněný projekt šanci uložit vnitřní IUnknown.

  2. Voláním InitializeForOwner metody. Vlastněný projekt provádí veškerou instanci při volání této metody namísto volání IVsProjectFactory::CreateProject , jako by tomu bylo u projektů, které nejsou ve vlastnictví. Vstupní VSOWNEDPROJECTOBJECT výčet je obvykle agregovaný projekt vlastněný. Vlastněný projekt může použít tuto proměnnou k určení, zda již byl vytvořen objekt projektu (soubor cookie se nerovná hodnotě NULL) nebo musí být vytvořen (soubor cookie se rovná hodnotě NULL).

    Typy projektů jsou identifikovány jedinečným identifikátorem GUID projektu, podobně jako CLSID objektu COM. Jedna továrna projektu obvykle zpracovává vytváření instancí jednoho typu projektu, i když je možné, že jedna továrna projektu zpracovává více než jeden identifikátor GUID typu projektu.

    Typy projektů jsou přidruženy ke konkrétní příponě názvu souboru. Když se uživatel pokusí otevřít existující soubor projektu nebo se pokusí vytvořit nový projekt klonováním šablony, použije integrované vývojové prostředí (IDE) příponu souboru k určení odpovídajícího identifikátoru GUID projektu.

    Jakmile integrované vývojové prostředí určí, jestli musí vytvořit nový projekt nebo otevřít existující projekt určitého typu, integrované vývojové prostředí použije informace v systémovém registru v části [HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\8.0\Projects] a zjistí, který balíček VSPackage implementuje požadovanou továrnu projektu. Integrované vývojové prostředí (IDE) načte tento balíček VSPackage. V metodě SetSite musí balíček VSPackage zaregistrovat svou projektovou továrnu v integrovaném vývojovém prostředí zavoláním RegisterProjectType metody.

    Primární metodou IVsProjectFactory rozhraní je CreateProject, která by měla zpracovávat dva scénáře: otevření existujícího projektu a vytvoření nového projektu. Většina projektů ukládá stav projektu do souboru projektu. Nové projekty se obvykle vytvářejí vytvořením kopie souboru šablony předaného CreateProject metodě a následným otevřením kopie. Existující projekty se vytvářejí tak, že přímo otevřou soubor projektu předaný metodě CreateProject . Metoda CreateProject může uživateli podle potřeby zobrazit další funkce uživatelského rozhraní.

    Projekt může také používat žádné soubory a místo toho uložit stav projektu do jiného mechanismu úložiště, než je systém souborů, jako je databáze nebo webový server. V tomto případě parametr názvu souboru předaný CreateProject metodě není ve skutečnosti cesta systému souborů, ale jedinečný řetězec – adresa URL – k identifikaci dat projektu. Není nutné kopírovat soubory šablony, které jsou předány k CreateProject aktivaci příslušné sekvence konstrukce, která se má provést.