Sto sviluppando un componente aggiuntivo di Word con la sua scheda Ribbon. La maggior parte del mio codice attuale è contenuta in alcune classi di servizi che vengono inizializzate in ThisAddIn_Startup e assegnate alle proprietà dell'oggetto Singleton di ThisAddIn. Ho anche un listener di eventi che ascolta gli eventi degli appunti che vorrei esporre al resto del codice come una proprietà dello stesso oggetto.La barra multifunzione personalizzata viene caricata prima di ThisAddIn_Startup, ma mi piacerebbe inizializzarne alcune - la migliore soluzione?
Il problema che sto eseguendo è che l'evento Load della mia barra si attiva prima dell'evento Startup di ThisAddIn (anche se l'oggetto singleton è già stato inizializzato e assegnato a Globals.ThisAddIn). Nel gestore di eventi Load della mia barra multifunzione vorrei installare un gestore su quel listener e utilizzare anche uno di questi servizi. Non posso, però, perché a questo punto dell'esecuzione del programma sono nulli.
Qual è la migliore soluzione a questo problema? Potrei semplicemente rendere tutte queste cose statiche membri di ThisAddIn e inizializzarle in un costruttore statico, ma ciò sembra sbagliato e distrugge anche l'intero punto di avere un evento Startup (o un oggetto Singleton).
Stranamente, originariamente non avevo questo problema quando il mio Ribbon aggiungeva solo i suoi componenti alla scheda Add-In incorporata, quindi l'evento Load attivato dopo l'avvio.
(Nota: sto facendo tutto questo in Visual Studio 2012 e con il progettista del nastro.)
In realtà non uso più la risposta accettata sopra. (Qual è la risposta SO appropriata a questo? Dovrei aggiungerne una nuova e spostare l'accettazione?) Quello che faccio è modificare il costruttore in Ribbon.Designer.cs per chiamare un metodo "ManualInitialize". Questo codice include tutto ciò che non dipende da ThisAddIn_Startup. Quindi aggiungo un altro metodo in Ribbon.cs "FinalStartup" chiamato da ThisAddIn_Startup che contiene tutto ciò che * fa * dipende da ThisAddIn_Startup. –
Penso che dovresti rimuovere la risposta accettata e lasciare la tua domanda come senza risposta. Forse quel qualcuno troverà un modo migliore. – Malick