Usare serviceReference.ClientConfig da Silverlight e non solo.
Immaginiamo di avere un file fatto in questo modo:
Possiamo andare a leggere la configurazione custom presente all’inizio del file così:<configuration> <brokerServiceConfiguration> <assemblies> <add name="MyAssembly, Version=1.0.0.0" /> assemblies> brokerServiceConfiguration> <system.serviceModel> <bindings> <basicHttpBinding> <binding name="..." > <security mode="None"> <transport> <extendedProtectionPolicy policyEnforcement="Never" /> transport> security> binding> basicHttpBinding> bindings> <client> <endpoint address="..."
binding="basicHttpBinding"
bindingConfiguration="sampleServiceConfig"
contract="..."
name="sampleServiceConfig" /> client> system.serviceModel> configuration>
Commnand Linevar config = XDocument.Load( "ServiceReferences.ClientConfig" ); var assemblies = config.Descendants( "brokerServiceConfiguration" ) .Descendants( "assemblies" ) .Descendants( "add" ) .Select( e => e.Attribute( "name" ).Value ); return assemblies.AsReadOnly();
Ma non solo… nella migrazione di Radical verso la prima drop per Silverlight e Windows Phone 7 mi sono trovato di fronte ad un blocco di codice come questo:
What the hell is that?[Conditional( "DEBUG" )] void AddDelayIfAny() { #if !WP7 var cl = CommandLine.GetCurrent(); Int32 delay; if( cl.TryGetValue( "asyncdelay", out delay ) ) { #if !SILVERLIGHT logger.WarnFormat( "Adding delay to async execution: {0}", delay ); #endif System.Threading.Thread.Sleep( delay ); } #endif }
è un pezzo del mio “Fluent AsyncWorker” che se:
- siamo in debug;
- e abbiamo sulla command line un parametro “AsyncDelay”;
Ora è evidente che la Command Line non esiste su Silverlight ma nulla ci vieta di simularla usando proprio gli InitParams di cui ha parlato Igor:
Come direbbe Corrado: Happy Silverlighting :-)public class CommandLine { static CommandLine _current; ////// Gets the current command line instance. /// ///public static CommandLine GetCurrent() { if( _current == null ) { _current = new CommandLine( Application.Current.Host.InitParams ); } return _current; } readonly IDictionary<String, String> initParams; /// /// Initializes a new instance of theclass. /// /// The current command line args. public CommandLine( IDictionary<String, String> initParams ) { Ensure.That( initParams ).Named( () => initParams ).IsNotNull(); this.initParams = initParams; } //omissis... }
.m