我使用spring.net IOC依賴注入爲我的asp.net web應用程序設置了我的xml配置文件。我引用了web.config中的每個配置文件。 spring.net配置文件(settings.xml)中的一個設置示例是:在多個配置文件中重新定義spring.net對象
<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>
這一切正常。
現在我安裝我的web應用程序在多種環境中,所以我創造環境如spring.net配置文件。 dev,qa,prod。
所以當安裝應用程序時,在web.config中引用適用的環境spring文件。這是自動化安裝程序的一部分。
在QA環境文件,我要重新定義上述「OBJ1」移動到對象:
<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>
然而,因爲這是自動的(將基準對環境文件),settings.xml文件是沒有改變。
現在參照2個文件具有相同ID定義的目標 - 這將導致重大問題運行時錯誤會發生。
有什麼辦法,我可以包括在qa.xml和標誌等,以突出該對象定義的覆蓋在任何其他的XML文件的任何其他定義的對象具有相同的對象ID?
可以裝入兩個相同的ID,這將「覆蓋」第一家上市的目標(創建之前,據我所知,他們必須在不同的文件中通過使它們通過<資源...>,因爲這個它是一個很好的參考練習將您的上下文資源按從「全局含義」開始到「本地含義」(在最後一項具有app.config的 )的順序包含在內 –
Beachwalker
@Stegi :爲什麼不把它作爲答案?看起來像這樣解決了OP的問題 – Marijn
在一個* single * xml文件中,一個'id'只能被指定一次。'id'屬性實際上是一個xml屬性 - 所以xml解析器爲您提供了額外的驗證,無論是在Visual Studio中還是在運行時加載文件時。但是,如Stegi所提到的,您可以在不同文件中指定具有相同ID的對象,並使用相同的上下文加載。來自上次加載文件的定義將覆蓋具有相同ID的任何以前的定義。 – Marijn