2011-09-13 10 views
6

Stiamo costruendo un'applicazione Prisma WPF. Abbiamo diversi sviluppatori che lavorano su diversi progetti di moduli e più moduli vengono iniettati nella Shell principale dell'applicazione. L'applicazione principale è anche un progetto separato. Vogliamo anche essere in grado di utilizzare i moduli in diverse applicazioni. Non vogliamo dover denominare le regioni con gli stessi nomi in ogni applicazione.Prism/MEF: Come registrareViewWithRegion senza codificare in modo rigido il nome della regione

Ad esempio, dire che abbiamo un modulo per essere utilizzato in due diverse applicazioni. In un'applicazione, il suo sviluppatore può nominare la regione del modulo "DetailsRegion" e nell'altra il suo sviluppatore potrebbe chiamarlo "ResultsRegion".

Ogni esempio posso trovare registri la vista con la Regione per codificare il nome della regione nella definizione della classe del modulo:

myRegionManager.RegisterViewWithRegion("RegionNameHere", GetType(ModuleViewType)) 

Quello che voglio fare è mettere il nome della regione nella principale app.config dell'applicazione e passare questo nome al modulo. Qualcosa di simile a questo:

Nella principale app.config Shell Applicazione:

<Modules> 
    <SearchModule> 
     <add key="RegionName" value="SearchRegion" /> 
    </SearchModule> 
</Modules> 

E nel file di classe del modulo:

Dim settings As NameValueCollection = CType(ConfigurationManager.GetSection("Modules/SearchModule"), NameValueCollection) 
Dim regionName as string = settings("RegionName") 
myRegionManager.RegisterViewWithRegion(regionName, GetType(SearchModuleType) 

In un certo senso, questo sarebbe l'ultimo passo per tutto disaccoppiare i moduli dalla shell e l'uno dall'altro.

Questo funziona perfettamente nel visualizzazioni del modulo. Ma non posso farlo in definizione della classe del modulo di file, come ConfigurationManager non è disponibile a quel livello.

Posso farlo inserendo il nome della regione nella sezione ApplicatonSettings del app.config del modulo . Ma questo vanifica lo scopo di essere in grado di memorizzare il modulo in una posizione per essere caricato da più applicazioni. Deve essere davvero nel app.config dell'applicazione principale .

Esiste un modo per registrare vista di un modulo con una Regione, senza codificare il nome della regione nel codice? Cerchiamo così duramente di NON codificare nulla. È veramente necessario qui?

+0

La maggior parte degli esempi che ho visto ha i nomi di regioni come un insieme di stringhe statiche in una classe statica denominata RegionNames nella libreria di classi Infrastructure ed è anche ciò che stiamo facendo. Queste stringhe statiche sono utilizzate nella shell e nei moduli. Forse puoi avere un file RegionNames diverso per ciascuna delle tue applicazioni –

+0

Avrei dovuto accennare al fatto che abbiamo una libreria di classi Infrastructure, che contiene codice condiviso da tutti i moduli e tutte le applicazioni. Quindi una classe RegionNames statica per ogni applicazione non è realmente la risposta. Una classe statica deve ancora essere compilata nell'applicazione. È solo un altro modo per codificare a fondo i nomi delle regioni. Voglio essere in grado di mettere i nomi delle regioni in un file .config al livello dell'applicazione di base, che non ha bisogno di essere compilato con l'app. –

risposta