使用專案 Factory 建立專案執行個體
Visual Studio 中的專案類型會使用專案 Factory 來建立專案物件的執行個體。 專案 Factory 類似於可共同建立 COM 物件的標準類別 Factory。 不過,專案物件無法共同建立;只能使用專案 Factory 來建立它們。
當使用者載入現有專案或在 Visual Studio 中建立新專案時,Visual Studio IDE 會呼叫 VSPackage 中實作的專案 Factory。 新的專案物件會提供 IDE 足夠的資訊來填入解決方案總管。 新的專案物件也提供支援 IDE 起始之所有相關 UI 動作的必要介面。
您可以在專案的類別中實作 IVsProjectFactory 介面。 一般而言,它位於自己的模組中。
支援由擁有者匯總的專案必須在其專案檔案中保存擁有者金鑰。 在具有擁有者金鑰的專案上呼叫 CreateProject 方法時,擁有的專案會將其擁有者金鑰轉換成專案 Factory GUID,然後在此專案 Factory 上呼叫 CreateProject
方法以執行實際建立。
建立擁有的專案
擁有者會在兩個階段中建立擁有的專案:
藉由呼叫 PreCreateForOwner 方法。 這讓擁有的專案有機會根據輸入控制
IUnknown
建立匯總的專案物件。 擁有的專案會將內部IUnknown
和匯總的物件傳回擁有者專案。 這讓擁有的專案有機會儲存內部IUnknown
。藉由呼叫 InitializeForOwner 方法。 當呼叫此方法而不是呼叫
IVsProjectFactory::CreateProject
時,擁有的專案會執行其所有具現化,就如同未擁有的專案一樣。 輸入VSOWNEDPROJECTOBJECT
列舉通常是匯總擁有的專案。 擁有的專案可以使用這個變數來判斷其專案物件是否已建立 (Cookie 不等於 NULL),還是必須建立 (Cookie 等於 NULL)。專案類型是由唯一專案 GUID 所識別,類似於可共同建立 COM 物件的 CLSID。 一般而言,一個專案 Factory 會處理建立單一專案類型的執行個體,不過可以有一個專案 Factory 處理多個專案類型 GUID。
專案類型與特定副檔名相關聯。 當使用者嘗試開啟現有的專案檔案,或嘗試藉由複製範本來建立新專案時,IDE 會使用檔案上的副檔名來判斷對應的專案 GUID。
一旦 IDE 判斷它是否必須建立新專案或開啟特定類型的現有專案,IDE 就會使用 [HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\8.0\Projects] 底下系統登錄中的資訊,來找出哪些 VSPackage 會實作必要的專案 Factory。 IDE 會載入此 VSPackage。 在 SetSite 方法中,VSPackage 必須藉由呼叫 RegisterProjectType 方法,向 IDE 註冊其專案 Factory。
IVsProjectFactory
介面的主要方法是 CreateProject,它應該處理兩個案例:開啟現有的專案並建立新的專案。 大部分的專案都會將其專案狀態儲存在專案檔案中。 一般而言,新專案是藉由建立傳遞至CreateProject
方法的範本檔案複本,然後開啟複本來建立。 現有的專案會藉由直接開啟傳遞至CreateProject
方法的專案檔案來具現化。CreateProject
方法可以視需要向使用者顯示其他 UI 功能。專案也可以使用任何檔案,而是將其專案狀態儲存在檔案系統以外的儲存機制中,例如資料庫或 Web 伺服器。 在此情況下,傳遞給
CreateProject
方法的檔案名稱參數實際上不是檔案系統路徑,而是用來識別專案資料的 URL 的唯一字串。 您不需要複製傳遞至CreateProject
的範本檔案,即可觸發要執行的適當建構順序。