Avatar billede sbjerre Nybegynder
10. maj 2005 - 17:37 Der er 6 kommentarer og
1 løsning

Globale konstanter udenfor assembly

Hej

Dette bliver nok et lidt sjovt spørgsmål.
Det er muligt at det ligger lige til højre benet og det er muligt at det er helt hen i vejret.

Mit store problem er at jeg gerne vi arbejde med SUPER globale konstanter, dvs. konstante der er tilgængelige indenfor et namespace, MEN som ikke er kompileret med i assembly (hvis det nogen mening)

Den bedste måde at forklare det på er ved at forestille sig at man udvikler et website i ASP.NET og gerne vil kunne vælge imellem dansk og engelsk (f.eks. via en application setting key i web.config)

Jeg ser nogle forskellige muligheder:

1. At have 2 web.config filer i "skifte imellem" hvor alle teksterkonstanter (label tekster) er noteret i hvert sit sprog

Ulempen er bare at koden bliver grim og bøvlet hvis jeg skal tilgå konstanter ved:
TestLabel.Text = TestConfigurationSettings.AppSettings["DKConstantEksempel"].ToString();


2. At bruge f.eks. Application_Start i global.asax til noget a'la:
********************************
Hashtable _Labels = new Hashtable(50);
_Labels.Add("DKLabel", "Navn");
Application.Add("_Labels", _Labels);
********************************

hvilket ville kunne bruges i code behind filerne som:

********************************
Hashtable _Labels = (Hashtable)Application["_Labels"];
TestLabel.Text = _Labels["DKLabel"].ToString();
********************************

men i dette tilfælde ligger konstanterne i den kompilerede assembly og kan der ikke ændres så længe applicationen kører.


3. Ligge alle konstanter i en klasse for sig selv, hvilket giver samme probleme som i 2, i det at konstanter dermed bliver kompilerede med i assembly...


I ASP (3.0) kunne man lave en include på hver .asp side hvor konstanterne skulle bruges og tilgå dem den vej, men dengang blev koden heller ikke kompilerede een gang men i stedet for hvert request, hvilket betød at man bare kunne skifte den inkluderede fil ud under kørsel.


Any good ideas?


Mvh Søren
Avatar billede arne_v Ekspert
10. maj 2005 - 17:44 #1
Der er vel ingen tvivl om at "the .NET way" er ressources og ResourceManager
Avatar billede arne_v Ekspert
10. maj 2005 - 17:48 #2
En pragmatisk løsning kunne være at loade fra fil til en Hashtable hver x. minut
eller med bestemt management side og så lade alle hente fra den Hashtable
Avatar billede sbjerre Nybegynder
10. maj 2005 - 18:56 #3
Jeg fandt denne artikel der vist handler om en letter udbygget version af ResourceManager, som jeg kigger igennem imorgen. Men det bliver uden tvivl "The .NET way". Takker for pointeren.
Avatar billede arne_v Ekspert
28. maj 2005 - 16:39 #6
OK ?
Avatar billede sbjerre Nybegynder
29. maj 2005 - 15:05 #7
Jo tak jo tak....
Det var helt perfekt, og jeg taget udgangspunkt i http://www.dotnet247.com/247reference/a.aspx?u=http://www.codeproject.com/aspnet/localization_websites.asp
og udfra dette ombygget koden så jeg i web.config kan vælge hvilken version af labels mv jeg vil bruge.

Det er et standardsystem der bruges hos flere kunder hvor de hver i sær har deres specielle ønsker til hvad ledetekster mv. og det var ved at være et halvstort problem at rette i asp:Labels hver gang "kunden" skal have ændret lidt.

Det vil blive MEGET nemmere at administrere i fremtiden, da jeg nu bare skal rette i en XML fil, IMENS applicationen kører. Det er simpelthen råfedt, og jeg vil uden tvivl bruge det i alle applicationer fremover.

Så tak for pointeren :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester