Estoy configurando mis archivos de configuración xml para mi aplicación web asp.net utilizando la inyección de dependencia IOC spring.net. Hice referencia a cada uno de mis archivos de configuración en el web.config. Una muestra de la configuración en el archivo de configuración de spring.net (settings.xml) es:redefinir el objeto spring.net en varios archivos de configuración
<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>
Todo funciona bien.
Ahora instalo mi aplicación web en múltiples entornos, así que estoy creando un archivo de configuración de spring.net para el entorno, por ejemplo. dev, qa, prod.
Por lo tanto, al instalar la aplicación, se hace referencia al archivo de resorte del entorno correspondiente en el archivo web.config. Esto es parte de un instalador automático.
Dentro del archivo de entorno de control de calidad, que desea volver a definir el objeto anterior "obj1" a:
<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>
Sin embargo, ya que está automatizado (añadiendo la referencia al archivo de entorno), el archivo es settings.xml sin cambio.
Y ahora haciendo referencia a 2 archivos con un objeto definido con la misma ID, esto causa problemas importantes ya que se producirán errores de tiempo de ejecución.
¿Hay alguna manera de que pueda incluir en el qa.xml y marcar o similar para resaltar esta definición de objeto que anula a cualquier otro objeto definido en cualquier otro archivo xml con el mismo ID de objeto?
Puede cargar dos identificadores idénticos y esto "anulará" el primer objeto enumerado (antes de la creación, AFAIK deben estar en archivos diferentes haciéndolos referenciar a través de. Debido a esto es un buen practique incluir sus recursos de contexto en el orden que comienza con "significado global" hasta "significado local" (teniendo app.config's en la última entrada). –
Beachwalker
@Stegi : ¿por qué no proporcionar esto como una respuesta? Parece que esto resuelve el problema de OP. – Marijn
En un * xml solo archivo, un 'id' solo se puede especificar una vez.El atributo 'id' en realidad es un atributo xml, por lo que el analizador xml le brinda validación adicional, tanto en Visual Studio como al cargar el archivo en tiempo de ejecución. Pero como menciona Stegi, puede especificar un objeto con el mismo ID en diferentes archivos, cargados por el mismo contexto. La definición del último archivo cargado anula cualquier definición anterior con el mismo ID. – Marijn