Spero che questa risposta sia di beneficio per gli altri che raggiungono tale domanda, perché solo con il timestamp penso che OP abbia risolto il problema molto tempo fa. ;-)
Il post non presenta una soluzione immediata (avrei bisogno di più dati da OP per quello), ma offre invece alcuni suggerimenti.
padre-figlio
Come menzionato nei commenti (prima da @Rachel), per i dati gerarchici esiste una relazione genitore-figlio.
Principio di incertezza
Come per qualsiasi decisione di design, c'è il principio di indeterminazione : tieni a bada il più a lungo possibile. Implementa entrambi e fai in modo che vadano avanti e vedi quali sono i tuoi casi migliori. Dovrei notare che non sono affatto esperto in WPF, ma quella frase:
I see pros and cons for any of the approaches and can not decide which one is better.
indica strongmente il rifiuto di una decisione finché non vedi che un approccio produce risultati migliori di quelli che funzionano per te.
Dipende
Dato che ci sono poche informazioni su casi d'uso e quantità di dati condivisi / specifici, proporrò alcune cose basate su ipotesi.
Supponendo dati extra molto diversi, sempre specifici del caso
- Per ogni caso, crea un file di proprietà o oggetti valore in grado di memorizzare dati aggiuntivi.
- Aggiungi meccanismo che consente ad AppContext di richiamare detto file di proprietà / oggetto valore in nome / id / altro.
- Le macchine virtuali che richiedono questo dovrebbero essere in grado di dire a AppContext di estrarre quei dati quando vengono inizializzati. Questo può anche essere fatto tramite la convenzione di denominazione.
Supponendo dati extra molto diversi, parzialmente riusabili
Procedi come in caso precedente. Perché nonostante questo consiglio, sto segnalandolo come una sezione separata? Perché nei casi di riutilizzo solo parziale, spesso mi sembra prudente saltare semplicemente il riutilizzo:
- il riutilizzo parziale si tenta, ma raramente vale davvero il tempo speso per pensare "come riutilizzarlo bene"
- se si compromette il riutilizzo, il risultato finale è raramente gestibile
- i neofiti che arrivano al codice saranno piuttosto confusi quando DOVREBBERO riutilizzare e quando no e COME riutilizzare
Conclusione: la chiarezza soffre. Se non sei sicuro che i dati verranno riutilizzati, non preoccuparti.
Supponendo una grande quantità di dati extra, molti casi diversi, riutilizzo significativo
Dividi l'app. Ovviamente ci sono troppe app che cercano di adattarsi qui ei pattern identificati potrebbero essere domini diversi. A questo punto ho dato uno sguardo più da vicino ai pattern DDD (specialmente Bounded Context) e prenderemo in considerazione il trasferimento dei dati condivisi reali da IAppContext al dominio di supporto.