mit web.config-Variablen werden in web.config
Ich würde gerne eine variable definiert, die in meinem web.config, die ich verwenden kann an mehreren stellen in meinem web.config-Datei (und andere Konfigurationsdateien). Es ist wahrscheinlich einfacher, um beispielsweise zu erklären ...
web.config
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="AuthServiceEndPoint" value="any_old_name_i_like"/>
</appSettings>
<system.web>
...
<system.serviceModel>
<client>
<endpoint
address="net.tcp://localhost/AuthService"
binding="netTcpBinding"
contract="MyServices.Contracts.IAuthService"
name="#{AppSettings.AuthServiceEndPoint}"
bindingConfiguration="netTcpBindingConfig"
/>
</client>
</system.serviceModel>
</configuration>
windsor.config
<?xml version="1.0" encoding="utf-8" ?>
<castle>
<components>
...
<component
id="AuthProvider"
service="MyServices.Client.IAuthProvider, MyServices.Client"
type="MyServices.Client.AuthProvider, MyServices.Client"
lifestyle="transient">
<parameters>
<endpoint>#{AppSettings.AuthServiceEndPoint}</endpoint>
</parameters>
</component>
</components>
</castle>
Ist das möglich?
Bearbeiten (etwas mehr Informationen)
Ich habe bereits die Möglichkeit des Zugriffs auf die AppSettings aus meiner windsor.config-Datei (die eigentlich bearbeitet von Schloss windsor und eine benutzerdefinierte XmlInterpreter.
Die eigentliche Frage ist, kann ich dies in meiner web.config?
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="AuthServiceEndPoint" value="any_old_name_i_like"/>
</appSettings>
<system.web>
...
<system.serviceModel>
<client>
<endpoint
address="net.tcp://localhost/AuthService"
binding="netTcpBinding"
contract="MyServices.Contracts.IAuthService"
name="#{AppSettings.AuthServiceEndPoint}"
bindingConfiguration="netTcpBindingConfig"
/>
</client>
</system.serviceModel>
</configuration>
ie - access-variable in meinem <appSettings>
aus anderen teilen meiner web.config-Datei.
- Sind beide config-Dateien im gleichen Verzeichnis? Denken Sie daran, dass web.config-Dateien sind hierarchisch aufgebaut, so appsettings definiert in der root web.config wäre auch verfügbar im web.config-Dateien in Unterordnern. Dies kann jedoch nicht, die Ihre Anforderungen erfüllen.
- sorry, ich habe einen key bit der Informationen, ich werde zu aktualisieren, meine Frage nun.
- Ich entfernte meine Antwort, denn es war nicht mehr relevant, mit der zusätzlichen info sofern in der edit.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aus der Spitze von meinem Kopf, ich Frage mich, ob Sie vielleicht in der Lage, dies zu tun mit T4? Ich denke, dass vielleicht könnten Sie eine Vorlage definieren, die analysiert Web-Vorlage.config-und Ausgänge Web.config? Natürlich funktioniert dies nur für eine einzige Datei.
Können Sie NAnt oder MSBuild für diese. Sie müssen separate Konfigurationsdateien für beide, aber beim erstellen des Projekts können Sie es automatisch tun-Transformationen auf Ihrer Website.config-und andere Konfigurations-Dateien.
Nicht, dass ich denken kann. Sie tun konnte, Ihre Konfiguration in C# im Allgemeinen.asax.cs anstelle der xml-Datei.
Alternativ haben Sie Ihr web.config bearbeitet von Ihren build-Prozess zu ersetzen, die alle diese Werte. FinalBuilder ist ein neato "Bearbeiten der XML-Datei" Aktion, die verwendet XPath-ganz gut, um dies zu tun, und FinalBuilder hat Variablen haben. Das Problem ist gelöst. Dies ist, wie ich meine baut bei der Arbeit.
Hier gehe ich der Beantwortung meiner eigenen Frage mal wieder :-S
Ich löste dies durch das schreiben einer NetTcpServiceLocator ...
... zusammen mit einer custom config section handler, die auch implementiert die obige Schnittstelle und liest in der folgenden config-Abschnitt ...
Dann erstellte ich einen proxy für jeden service ...
Mein Controller hat eine Abhängigkeit zu einem Service, die eine Abhängigkeit vom ITestService. All dies ist zusammen geklebt mit Schloss Windsor und durch die Verwendung von property dependency injection.
So, mein controller nennt es Service, die wiederum ruft die ITestService (in diesem Fall ein proxy, der bekommt es-Endpunkt aus der benutzerdefinierten Abschnitts-handler).
Der benutzerdefinierten Abschnitts-handler (die auch die INetTcpServiceLocator) hat einen windsor-lifestyle von "perWebRequest", so wird es genannt, die das framework und web.config Einlesen in ein array im Speicher. Wenn der service-proxy aufgerufen wird, dann zieht nur die relevanten Endpunkt basierend auf dem Vertrag geben.
Es ist alles angetrieben durch die Art des Vertrages, so gibt es keine Notwendigkeit, irgendwelche Variablen in web.config mehr.
Ich habe mich für eine code basierte Lösung, wie ich don ' T verwenden Sie einen build-Prozess lokal, nur wenn ich meine code subversion nicht die build-Prozesses-kick auf unserem server zu bauen.