Modificare le Settings con scope Application

Usando VS 2005 ho potuto apprezzare il lavoro fatto per quanto riguarda la gestione dei settings dell’applicazione che ora hanno due scope quello Application (solo read only nel senso che occorre modificare il file config) e quello User.
Il problema però è che i TableAdapter utilizzano una stringa di connessione memorizzata nei settings, ma con scope Application quindi a runtime non è possibile modificare la stringa di connessione (tra l’altro a quanto pare non è possibile inserire nei settings una Connection String che abbia lo scope User confermate?).

Un modo per modificare la stringa di connessione lo trovate qui http://blogs.msdn.com/smartclientdata/archive/2005/07/25/443034.aspx e consiste nel gestire l’evento  SettingsLoaded dell’MySettings per eseguire la modifica.

Un modo alternativo può essere quello di utilizzare la Reflection:

Dim m As System.Reflection.MethodInfo
m = My.MySettings.Default.GetType.GetMethod(“set_Item”)
m.Invoke(My.MySettings.Default, New Object() {“MyConnectionString”, “Data Source=MySrv;Initial Catalog=MyDB;Persist Security Info=True;Integrated Security=True“})

[Update]In realtà non server ricorrere alla Reflection perchè basta fare la seguente impostazione:

My.MySettings.Default.Item(“MyConnectionString”) = “Data Source=MySrv;Initial Catalog=MyDB;Persist Security Info=True;Integrated Security=True”

In sostanza le settings con scope creano una proprietà readonly di tipo:
My.MySettings.Default.MyConnectionString

Per accedere direttamente alla proprietà Item (ovviamente bisogna specificare il nome del settings come string) l’impostazione è possibile. Il dubbio mi è venuto chiedendomi come era possibile evitare di impostare tramite Item le proprietà ed in effetti non alcun blocco in questo senso anche perchè quando l’applicazionme si avvia le settings di tipo Application o User devono essere impostate leggendo dai file di configurazione.