De manier van .net om met configuratie om te gaan is gewoonweg fantastisch. Ik kom nog uit de tijd dat .ini files erg geavanceerd waren, dus de app.config is een enorme stap vooruit.
Nadeel is wel dat de config files groot worden. Erg groot... Nu zijn er gelukkig voor de verschillende frameworks mooie tools die je helpen bij het configureren. Ik noem even de ASP.Net config, de entlib configurator en natuurlijk de WCF configurator. Allemaal handig.
Echter, ik ben gek op code. Ik wil zien wat er gebeurt in mijn .config bestanden. Dus duik ik regelmatig in mijn config om te zien wat de tool nu precies uitspookt.
Als je nou, net als ik, een hekel heb aan 1 groot config bestand waar alles in zit, is het handig om je config op te splitsen. Bijvoorbeeld:
<?xml version="1.0"?>
<configuration>
<appSettings configSource="myAppSettings.config"/>
<connectionStrings configSource="myConnectionStrings.config"/>
<system.web>
<compilation debug="true" />
<authentication mode="Windows" />
</system.web>
</configuration>
Op die manier kun je dus je specifieke configs in een eigen file zetten. De myAppSettings.config ziet er als volgt uit:
<?xml version="1.0"?>
<appSettings>
<add key="someKey" value="someValue"/>
<add key="anotherKey" value="anotherValue"/>
<add key="yetAnotherKey" value="yetAnotherValue"/>
</appSettings>
En voor de volledigheid, de myConnectionStrings.config:
<?xml version="1.0"?>
<connectionStrings>
<add name="myDatabase" connectionString="server=.\SQLExpress;database=db;Integrated Security=SSPI"/>
</connectionStrings>
Heel mooi. En dat wil ik dus ook met mijn <system.serviceModel> doen, waar mijn WCF configuratie in staat.
Waarom? Ik heb een classlibrary gemaakt met daarin alle gegeneerde WCF client code, plus een aantal wrapper classes die de business rules bewaken. Ik wil die classlibrary uitleveren aan diegene die de front end applicaties bouwen, en de configuratie moet er uiteraard bij zitten. Als ik die niet loskoppel, dan moeten ze de config in hun eigen app.config zetten. Niet zo'n probleem, maar ik vind dat dat bij de classlibrary hoort.
Maar wat schetst mijn verbazing? Dat kan dus helemaal niet! de <system.servicemodel> tag heeft geen, ik herhaal geen configSource attribuut!
Kan iemand mij uitleggen waarom niet???