Sunteți pe pagina 1din 35

8

 Permite utilizarea setarilor de configurare in o


modalitate intuitiva, orientata obiect.
 Permite citirea si scrierea setarilor fara a depinde
de Windows registry. Astfel aplicatiile voastre vor
fi mai administrator-friendly  si, in plus, vor fi
mai usor portate pe alte sisteme de operare (ce
nu folosesc registry).
 Toate obiectele pe care le vom folosii pt
realizarea de configurari sunt in clasa
System.Configuration
 Clasele principale din acest namespace sunt
Configuration si ConfigurarionManager.
 Obiectele de tip Configuration sunt create
folosind metode din ConfigurationManager
Configuration cs =
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

Configuration cs = ConfigurationManager.OpenMachineConfiguration();

ExeConfigurationFileMap myMap = new ExeConfigurationFileMap();


myMap.ExeConfigFileName = @”DBConnectrionStringDemo.exe.config”;
Configuration cs =
ConfigurationManager.OpenMappedExeConfiguration(myMap,
ConfigurationUserLevel.None);

Configuration cs =
ConfigurationManager.OpenMappedMachineConfiguration(myMap);
 Metodele de mai sus indeplinesc acelasi scop: deschid un fisier de configurare si
returneaza valorile continute de acelasi in un obiect Configuration.
 Metoda 1 si 3 deschid fisiere de configurare specifice aplicatiei iar 2 si 4 specifice
calculatorului pe care ruleaza aplicatie.
 Enumerarea ConfigurationUserLevel contine urmatoarele valori:
 None: returneaza un obiect Configuration care se aplica la toti utilizatorii
 PerUserRoaming: returneaza un obiect Configuration, roaming, pentru pentru user-
ul actual.
 PerUserRoamingAndLocal: returneaza un obiect Configuration, local, pentru user-
ul actual.
 Prin obiectul ExeConfigurationFileMap putem folosii alt fisier de configurare (altul
decat cel predefinit: App.config)

OBS: In momentul in care se acceseza un ExeConfigurationFileMap trebuie ca utilizatorul


apelent sa aiba drepturi de citire pe acel fisier si evident trebuie ca acel fisier sa existe.
Runtime-ul nu va arunca exceptie daca acel fisier nu exista, deci este recomandat sa
verificati inainte de asignare.
 Setarile obisnuite (common settings) determina cum ruleaza o
aplicatie.
 supportedRuntime: specifica ce .NET Framework este necesar
pentru rularea aplicatiei:
<?xml version = “1.0”?>
<configuration>
<startup>
<supportedRuntime version=“v1.1.4322”>
</startup>
</configuration>
 Daca pe masina este un .NET framework diferit de cel pe care s-
a construit aplicatie, si nu ati specificat supportedRuntime,
aplicatia va pornii. Daca ati specificat supportedRuntime e rau :)
 developmentMode: permite verificare daca un
assembly poate fi folosit de mai multe aplicatii, fara
a-l instala in GAC (global assembly cache).
 Suplimentar trebuie adaugata o variabila de mediu
DEVPATH, care specifica unde se afla assembly-ul.
<?xml version = “1.0”?>
<configuration>
<runtime>
<developmentMode developerInstallation=“true”/>
</runtime>
</configuration>
 codeBase: permite specificare locatiei si versiunii unui assembly astfel incat
dupa ce se incarca runtime-ul acel assembly va fi folosit de la locatie
specificata.
<?xml version = “1.0”?>
<configuration>
<runtime>
<assemblyBinding xmlns=“schemaname”>
<dependantAssembly>
<assemblyIdentity name=“myProgram”
publicKeyToken=“xxxxx” culture=“en-us” />
<codeBase version=“x.0.0.0”
href=www.viprad.com/myProgram.dll>
</dependantAssembly>
</assemblyBinding>
</runtime>
</configuration>
 In un fisier de configurare pot exista 2 sectiuni: appSettings si connectionStrings.
 In appSettings puteti stoca setari generice de aplicatii in timp ce connectionStrings este dedicat stocarii
de connection strings pentru baze de date.

<?xml version = “1.0”?>


<configuration>

<appSettings>
<add key="message" value="Hello World!" />
</appSettings>

<connectionStrings>
<add name="EmployeeDB”
connectionString="SERVER=…;DATABASE=…;UID=…;PWD=…;” />
<add name="OrdersDB”
connectionString="~\DATA\CustDB.mdb” />
</connectionStrings>

</configuration>
 Pentru a accesa appSettings vom folosii obiectul
ConfigurationManager:
NameValueColletion AllAppSettings =
ConfigurationManager.AppSettings;
Console.WriteLine(AllAppSettings[“message”]);
Console.WriteLine(AllAppSettings[0]);
 Deoarece NameValueCollection implementeaza
interfata IEnumerable putem folosii un enumerator
(si deci constructie foreach) pentru a parcurge toate
appSettings.
 Deoarece multe programe folosesc conectari la baze
de date, dezvolatatorii .net framework au decis sa
introduca un sistem dedicat de stocare si citire a
connection string-urilor necesare conectarii la baze
de date.
 Puteti accesa connectionStrings exact ca
appSettings. Diferenta este ca in loc de un
NameValueCollection connection string-urile vor fi
stocate in un ConnectionStringSettingCollections, ce
contine obiecte de tip ConnectionStringSettings.
 Odata ce avem obiectul ConnectionStringSettings il putem
folosii pentru a realiza o conexiune la o baza de date:
 In general stim ce connection string avem nevoie,
iterarea prin ele devenind inutila.

ConnectionStringSettings mySettings =
ConfigurationManager.ConnectionStrings[“Adventu
reWorksString”];

ConnectionStringSettings mySettings =
ConfigurationManager.ConnectionStrings[0];
 In aplicatii ASP.NET nu se recomanda folosirea
ConfigurationManager.
 Exista solutii dedicate: WebConfigurationManager.
 Diferentele intre ConfigurationManager si
WebConfigurationManager sunt:
 Metodei GetSection din ConfigurationManager ii corespunde
metoda GetWebApplicationSection din
WebConfigurationManager
 Metodei OpenMappedExeConfiguration ii corespunde
OpenMappedWebConfiguration
 Metodei OpenExeConfiguration ii corespunde
OpenWebConfiguration
 Application settings sunt configurari specifice
aplicatiei.
 Sunt 2 modalitati in care putem crea application
settings:
 una complicata: scriem de mana fisierul de configurare
si clasa necesara parsarii
 una simpla: lasam VS2005 sa creez fisierul si clasa
 Un ultim mecanism pe care il putem
folosii pentru salvarea application
settings este folosirea clasei
ApplicationSettingsBase.
 ApplicationSettingsBase este o
colectie Key/Value, unde referentierea
se face dupa o cheie.
 Tot ce trebuie sa facem pentru a
folosii ApplicationSettingsBase este sa
mostenim ApplicationSettingsBase si
sa “decoram” fiecare proprietate fie cu
UserScopedSettings, fie cu
ApplicationScopedSettings
 Principalele motive pentru crearea unui installer
pot fi:
 Dau aplicatiei un “look” profesional
 Simplifica munca utilizatorului. Cu cat un produs este
mai greu de instalat cu atat utilizatorul il va folosii mai
putin.
 Permit specificarea de setari (adrese de servere, baze
de date) si crearea de scurtari pe desktop, chei in
registry, etc.
 Reprezinta un mecanism usor de a sterge aplicatia.
 Clasa folosita pentru a crea un installer se numeste
Installer.
 Pentru a folosii clasa Installer trebuie urmati urmatorii
pasi:
 Mosteniti clasa Installer
 Implementati metodele Install, Commit, Rollback si Uninstall.
 Adaugati atributul RunInstallerAttribute cu valoarea true la clasa
derivata.
 Puneti clasa derivata in assembly-ul aplicatiei pe care doriti sa o
instalati.
 Invocati install-erle. Puteti folosii InstallUtil.exe (ca la servicii)
 Cand porneste instalarea este invocata metoda
Install.
 Daca nu apare nici o eroare este invocata metoda
Commit la finalul instalarii.
 Daca apare vreo eroare este invocata metoda
Rollback.
 Daca doriti stergerea aplicatiei este invocata metoda
Uninstall.
 Pentru a facilita utilizarea metodei Commit putem
folosii 2 evenimente: Commited si Commit
IDictionary mySavedState = new Hashtable();

Console.WriteLine( "" );

try
{
// Set the commandline argument array for 'logfile'.
string[] commandLineOptions = new string[ 1 ] {"/LogFile=example.log"};

// Create an object of the 'AssemblyInstaller' class.


AssemblyInstaller myAssemblyInstaller = new
AssemblyInstaller( "MyAssembly.exe" , commandLineOptions );

myAssemblyInstaller.UseNewContext = true;

// Install the 'MyAssembly' assembly.


myAssemblyInstaller.Install( mySavedState );

// Commit the 'MyAssembly' assembly.


myAssemblyInstaller.Commit( mySavedState );
}
catch (ArgumentException)
{
}
catch (Exception e)
{
Console.WriteLine( e.Message );
}
 .NET Configuration Tool permite modificarea
setarilor unei assembly folosind un mediu vizual.
 Ruleaza ca un snap-in in Microsoft Management
Console.
 Permite ajustarea potiticilor de securitate de
acces la cod
 Permite ajustarea serviciilor de remoting.
 Deschiderea snap-in-ului:
%SystemRoot%\Microsoft.NET\Framework\versi
onNumber\Mscorcfg.msc
 Aveti 5 optiuni:
 Manage the Assembly Code
 Manage Configured Assemblies
 Configure Code Access Policy
 Adjust Remoting Services
 Manage Individual Applications
 Un fisier de configuratie poate contine mai multe sectiuni
de configurari (Configuration Section)
 Pentru citirea unei sectiuni din un fisier de configurari se
poate folosii metode GetSection din ConfigurationManager
ConfigurationManager.
GetSection(“MyFirstSection/DataValues”) as
ValuesHandler
 Valoare returnata este de tip obiect deci va trebuii facuta o
operatie de cast in o clasa ce implementeaza
IConfigurationSectionHandler
 Salvarea sectiuniilor de configurare este foarte simpla: se
foloseste metoda Save sau SaveAs din o instanta a clasei
Configuration.
 Save adauga sectiuni de configurari adugate in instanta
clasei, sterge pe cele sterse si le modifica pe cele modificate.
 Save salveaza in fisierul ApplicationName.exe.config in timp
ce la SaveAs se poate specifica numele fisierului.
 OBS: Proprietatea ForceSave din proprietatea
SectionInformation din obiectul ConfigurationSection trebuie
setata true, altfel orice modificari vor fi ignorate in momenul
salvarii configurarilor.
 Atunci cand doriti un grad mai mare de customizare
in fisierele de configurare veti construi configuration
sections.
 Pentru a putea intelege o astfel de configuration
section trebuie sa construiti o clasa ce
implementeaza IConfigurationSectionHandler
 In .NET 2.0 IConfigurationSectionHandler a fost
inlocuit de ConfigurationSection.
 Cele 2 au functionalitati similare dar este de preferat
folosirea celei de a doua.
 Primul pas in folosirea unei sectiuni proprii este sa creati un
obiect SectionGroup in sectiune ConfigurationSection din
fisierul vostru de configurare.
 Obiectele ConfigurationSection sunt stocate in
ConfigurationSectionCollection din un obiect Configuration.
 Numele trebuie sa fie complet, inclusiv numele assembly-ului.

<configSection>
<sectionGroup name=“MyFirstSection
type=“DBConnectionStringDemo.MyFirstSectionHandler,
DBConnectionStringDemo” />
</configSection>
 Puteti accesa sectiunile si din clasa Configuration:
Configuration config
=ConfigurationManager.OpenExeConfiguration(Con
figurationUserLevel.None);
ConfigurationSectionGroupCollection DemoGroups
= config.SectionGroups;
foreach (String groupName in DemoGroup.Keys)
Console.WriteLine(groupName);
 In continuare
trebuie creata
sectiune
propriuzisa
 Acum trebuie implementat
IConfigurationSectionHandler.
 Are o singura metoda: Create.
 Construim si o clasa ValuesHandler.
 Tot ce face este sa ofere o modalitate mai
comoda de extragere a datelor din
Hashtable.
 in final:
ValuesHandler vals =
ConfigurationManager.GetSection(“MyFirst
Section/DemoValues”) as ValuesHandler.
 Alta solutie:
<configSection>
<Chapter9Section LastName=“Ion” FirstName=“vasile”>
</configSection>

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)


ConfigHandler Chapter9Section = new ConfigHandler();
//accesam datele prin Chapter9Section.FirstName sau LastName
config.Sections.Clear();
config.Sections.Add(“Chapter9Section”,Chapter9Section);
config.Save();
 O alta interfata folosita prin System.Configuration
este IApplicationSettingsProvider.
 E folosita (printre altele) de ApplicatioSettingsBase.
 Contine 3 metode:
 GetPreviousVersion: intoarce valoarea setarilor pentru
versiuni anterioare ale aplicatiei
 Reset: reseteaza setarile asociate aplicatiei la forma initiala
 Upgrade: Indica faptul ca aplicatia a fost actualizata si
ofera posibilitatea actualizarii setarilor pentru
compatibilitate cu aplicatia noua.

S-ar putea să vă placă și