Przygotowuję moje pliki konfiguracyjne xml dla mojej aplikacji internetowej asp.net za pomocą iniekcji zależności spring.net IOC. Odwołuję się do każdego z moich plików konfiguracyjnych w pliku web.config. Przykładem ustawienia w pliku konfiguracyjnym Spring.net (settings.xml) jest:redefiniować obiekt spring.net w wielu plikach konfiguracyjnych
<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>
To wszystko działa bez zarzutu.
Teraz instaluję aplikację internetową w wielu środowiskach, dlatego tworzę plik konfiguracyjny spring.net dla środowiska, np. dev, qa, prod.
Podczas instalowania aplikacji odpowiedni plik sprężyny środowiska jest wymieniony w pliku web.config. Jest to część automatycznego instalatora.
w pliku środowiska QA, chcę przedefiniować obiekt nad „obj1” do:
<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>
Jednak jak to jest zautomatyzowane (dodanie odniesienia do pliku środowiska), plik jest settings.xml nie zmieniony.
A teraz odniesienie do 2 plików o zdefiniowanym obiekcie o tym samym id - powoduje to poważne problemy, ponieważ wystąpią błędy czasu wykonywania.
Czy istnieje sposób, w jaki mogę uwzględnić w qa.xml i flagi lub tym podobne, aby podświetlić tę definicję obiektu nadpisuje inne zdefiniowane obiekty w dowolnym innym pliku xml o tym samym id obiektu?
Można załadować dwa identyczne identyfikatory, co spowoduje "przesłonięcie" pierwszego wyświetlonego obiektu (przed utworzeniem, AFAIK muszą znajdować się w różnych plikach, poprzez odwołanie się do nich przez. Z tego powodu jest to dobre przećwicz swoje zasoby kontekstowe w kolejności zaczynającej się od "globalnego znaczenia" aż do "lokalnego znaczenia" (z ustawieniem app.config przy ostatnim wpisie) –
Beachwalker
@Stegi : dlaczego nie podać tego jako odpowiedzi? Wygląda na to, że rozwiązuje to problem z OP: – Marijn
W pliku * single * xml "identyfikator" można podać tylko raz.Atrybut 'id' w rzeczywistości jest atrybutem xml - więc parser xml zapewnia dodatkową weryfikację zarówno w Visual Studio, jak i podczas ładowania pliku w środowisku wykonawczym. Ale jak wspomina Stegi, możesz określić obiekt o tym samym id w różnych plikach, załadowany tym samym kontekstem. Definicja z ostatnio załadowanego pliku zastępuje wszelkie poprzednie definicje tym samym identyfikatorem. – Marijn