31. januar 2009 - 17:57Der er
5 kommentarer og 1 løsning
Dynamisk konfiguration og string matching af class
Hej, Jeg vil gerne lave en konfigurations fil til mit program. Jeg er blevet glad for følgende syntax: NAME check:CLASS=args
Name er bare en ressource der skal matche noget internt i koden, checket er en boolsk værdi, klassen er et navn på en klasse og argumenterne er til klassens konstruktør. For at komme med et reelt eksempel for en bil og dens strategier vil det se ud som følgende:
Min kode skal så scanne dem ind, se om klasserne eksisterer, og om de boolske værdier eksisterer, og hvis de gør skal de køres. Kan man gøre dette i et kørende program dynamisk?
Det har taget lidt tid at kigge igennem, og skære ud for at få forståelsen korrekt. Det ser ud til at virke med en del modifikationer. For at hjælpe andre med lignende problemer i fremtiden burde man kigge på følgende linjer:
Denne kigger efter om en variabel i koden er true eller false. Gætter på den siger false hvis den ikke findes i konteksten. if((bool)this.GetType().GetProperty(check).GetValue(this, null))
Og så de følgende: Type t = Assembly.GetExecutingAssembly().GetType("E." + clazz); ConstructorInfo ci = t.GetConstructor(new Type[] { typeof(string) } ); object o = ci.Invoke(BindingFlags.Default, null, new object[] { arg }, null);
Og reflection kan nemt blive noget ulaeseligt. Og p.g.a. det og p.g.a. performance overhead er det noget som kun skal bruges hvis det er absolut noedvendigt.
Vil du instantiere DitProjekt.DinKlasse af typen DinType kan du instantiere den således: DinType plugin = (DinType)Activator.CreateInstance(Type.GetType("DitProjekt.DinKlasse"));
Synes godt om
Ny brugerNybegynder
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.