Sto configurando i miei file di configurazione xml per la mia applicazione web asp.net utilizzando l'iniezione di dipendenza IOC spring.net. Ho fatto riferimento a ciascuno dei miei file di configurazione in web.config. Un esempio di impostazione nel file di configurazione spring.net (settings.xml) è:ridefinire l'oggetto spring.net in più file di configurazione
<object id="obj1"
type="NS.Common.Cache.Class, NS.Common"
singleton="true"
init-method="Initialize"
destroy-method="Dispose">
<property name="Name" value="My Name" />
</object>
Questo tutto funziona correttamente.
Ora installo la mia applicazione Web in più ambienti così sto creando un file di configurazione spring.net per l'ambiente es. dev, qa, prod.
Così, quando si installa l'applicazione, nel file web.config viene fatto riferimento al file Spring Environment applicabile. Questo fa parte di un programma di installazione automatizzato.
All'interno del file dell'ambiente qa, voglio ridefinire l'oggetto di cui sopra "obj1" per:
<object id="obj1"
type="NS.Common.Cache.Class2, NS.Common"
singleton="true"
init-method="Initialize"
destroy-method="Dispose">
<property name="Name" value="My New Name" />
</object>
Tuttavia poiché questo è automatizzato (aggiungendo il riferimento al file di ambiente), il file è settings.xml non cambiato.
E ora facendo riferimento a 2 file con un oggetto definito con lo stesso id, questo causa gravi problemi quando si verificano errori di runtime.
C'è un modo che posso includere in qa.xml e flag o simili per evidenziare questa definizione di oggetto sovrascrive qualsiasi altro oggetto definito in qualsiasi altro file xml con lo stesso ID oggetto?
È possibile caricare due ID identici e questo "sovrascrive" il primo oggetto elencato (prima della creazione, AFAIK devono essere in file diversi facendoli fare riferimento tramite. Per questo motivo è un buon pratica per includere le risorse di contesto nell'ordine che inizia con "significato globale" fino a "significato locale" (con app.config nell'ultima voce). –
Beachwalker
@Stegi : perché non fornire questo come risposta? Sembra che questo risolva il problema dell'OP. – Marijn
In un file * singolo * xml, un 'id' può essere specificato solo una volta.L'attributo 'id' è in realtà un attributo xml - quindi il parser xml offre una convalida aggiuntiva, sia in Visual Studio che durante il caricamento del file in fase di runtime. Ma come menziona Stegi, puoi specificare un oggetto con lo stesso id in file diversi, caricati dallo stesso contesto. La definizione dell'ultimo file caricato sovrascrive eventuali definizioni precedenti con lo stesso id. – Marijn