Vairāk

Vai pastāvīgā ArcObjects darbvieta?

Vai pastāvīgā ArcObjects darbvieta?


Pielāgotā slānī man ir darbvietas mainīgais (fails GDB vai SDE), kas man ir jāsaglabā (saglabāt/ielādēt).

Tāpēc man ir jāpaliek darbvietas ConnectionProperties. Par laimi, ConnectionProperties atgriež PropertySet, kas īsteno IPersistStream, tāpēc tas ir mazsvarīgi. Bet man arī jāpaliek izmantojamā darba telpas rūpnīcas tipam.

Diemžēl WorkspaceFactory neīsteno IPersistStream, tāpēc pastāvīga tā nedarbojas (lasot atgriež nulli).

Vai ir kāds veids, kā to izdarīt?


Jautātājs atrada veidu, kā to izdarīt:

Turpiniet darbvietu WorkspaceFactory.WorkspaceType. Tad es saņemu darbvietas rūpnīcu ar šo metodi:

public static IWorkspaceFactory workspaceFactory (esriWorkspaceType type) {string stype; if (type == esriWorkspaceType.esriLocalDatabaseWorkspace) stype = "esriDataSourcesGDB.FileGDBWorkspaceFactory"; else if (type == esriWorkspaceType.esriRemoteDatabaseWorkspace) stype = "esriDataSourcesGDB.SdeWorkspaceFactory"; else return null; Ierakstiet factoryType = Type.GetTypeFromProgID (stype); IWorkspaceFactory wsf = (IWorkspaceFactory) Activator.CreateInstance (factoryType); atgriezties wsf; }

Es nedomāju, ka tā ir laba kodēšanas prakse, lai gan tiek izmantotas cietās kodētās virknes. Es nebūtu zinājis šīs virknes, ja nebūtu tās atradis ESRI koda paraugos.

Vai ir labāks veids, kā to izdarīt?

Es mēģināju izmantot tipu:

UID uid = darbvieta.WorkspaceFactory.GetClassID (); Guid guid = new Guid (uid.Value kā virkne); Ierakstiet workspaceFactoryType = Type.GetTypeFromCLSID (guid);

Tas šķita pievilcīgāk, jo tas ļautu izvairīties no kodētām virknēm:

IWorkspaceFactory wf = Activator.CreateInstance (workspaceFactoryType) kā IWorkspaceFactory;

Vienīgā problēma ir tā, ka es nevarēju izturēt Tips.


Skatīties video: Curso ArcObjects.NET - Tutorial 1 - Componentes, Toolbar, Buscar Capa