PDA

View Full Version : [C#]Passare variabili ad app.config


RaouL_BennetH
30-11-2007, 11:47
Ciao a tutti :)

E' possibile fare una cosa del genere?


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="MyClass.Properties.Settings.projectConnectionString"
connectionString="server=variabile;user id=variabile...etc.." />
</connectionStrings>
</configuration>


Cioè, non avere valori prefissati nel file app.config ma passargli delle variabili di volta in volta. Questo per cercare di utilizzare un solo file per diverse applicazioni.

Grazie :)

RaouL.

0rph3n
30-11-2007, 12:15
ma a sto punto a cosa ti servirebbe il file di configurazione? :confused:

^TiGeRShArK^
30-11-2007, 12:22
non so se in questo caso ti può servire..
ma io avevo fatto questa classettina per gestire la configurazione in C# dato che sentivo la mancanza delle properties di Java e, dopo una breve ricerca, non avevo trovato niente di simile...

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace FileSystemListener
{
public class Properties
{
private static Dictionary<string, string> properties = new Dictionary<string, string>();
private static string filename = "config.properties";
private static bool isLoaded = false;


private static void loadProperties()
{
if (isLoaded) {return; }
else
{
StreamReader reader = File.OpenText(filename);
string line = "";
while ((line = reader.ReadLine()) != null)
{
string[] splittedLine = line.Split('=');
string key = splittedLine[0];
string value = splittedLine[1];
properties.Add(key, value);
}
reader.Close();
isLoaded = true;
}
}


public static void setPropertiesFile(string filename)
{
Properties.filename = filename;
}


public static string get(string key)
{
loadProperties();
return properties[key];
}


public static void add(string key, string value)
{
loadProperties();
properties.Add(key, value);
}


public static void set(string key, string value)
{
loadProperties();
properties[key] = value;
}


public static void save()
{
StreamWriter writer = File.CreateText(filename);
foreach (string key in properties.Keys)
{
writer.Write(key + "=" + properties[key] + '\n');
}
writer.Flush();
writer.Close();
}
}
}

RaouL_BennetH
30-11-2007, 12:29
@0rph3n

Sono alla ricerca di un modo per non avere file in chiaro sul client. Se metto server, nomedb, user id e password nel file app.config, sul client dell'utente sono in chiaro. E poi per avere un unico app.config da poter usare per tutti.

@^TiGeRShArK^

ma per le properties di Java cosa intendi?

Pensando al C# a me come properties viene in mente:



private string _stringa;

public string Stringa
{
get { return _stringa; }
set { stringa = value; }
}


//da qualche parte nel codice....

Classe classe = new Classe();
classe.Stringa = "abcde";

//



Grazie per l'esempio, ho bisogno di ragionarci un pò su :)

^TiGeRShArK^
30-11-2007, 12:39
@0rph3n

Sono alla ricerca di un modo per non avere file in chiaro sul client. Se metto server, nomedb, user id e password nel file app.config, sul client dell'utente sono in chiaro. E poi per avere un unico app.config da poter usare per tutti.

@^TiGeRShArK^

ma per le properties di Java cosa intendi?

Pensando al C# a me come properties viene in mente:



private string _stringa;

public string Stringa
{
get { return _stringa; }
set { stringa = value; }
}


//da qualche parte nel codice....

Classe classe = new Classe();
classe.Stringa = "abcde";

//



Grazie per l'esempio, ho bisogno di ragionarci un pò su :)

si infatti.. :D
Le properties di Java che intendo io in realtà sono un meccanismo per gestire la configurazione.
Non è altro che una coppia di chiavi-valori che è possibile leggere da un file in questo formato:

host=192.168.0.1
username=pippo
password=pluto

semplicemente caricando il file di properties e accedendo tramite dei getters & setters.
Nella mia versione delle properties per il C# basta fare così:

Properties.loadProperties(); //La prima volta per caricare le properties, quindi di solito nel costruttore
string username = Properties.get("username");
string password = Properties.get("password");

e così via.
è anche possibile modificare le properties tramite il metodo set, aggiungerne altre tramite il metodo add e salvare il tutto sullo stesso file...
...ora che ci penso mi sò dimenticato il metodo remove... :fagiano:
ma è una banalità da implementare :D

uReverendo
30-11-2007, 13:42
Ciao a tutti :)

E' possibile fare una cosa del genere?


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="MyClass.Properties.Settings.projectConnectionString"
connectionString="server=variabile;user id=variabile...etc.." />
</connectionStrings>
</configuration>


Cioè, non avere valori prefissati nel file app.config ma passargli delle variabili di volta in volta. Questo per cercare di utilizzare un solo file per diverse applicazioni.

Grazie :)

RaouL.La classe ConfigurationManager può fare a caso tuo.

http://msdn2.microsoft.com/en-us/library/system.configuration.configurationmanager(VS.80).aspx