Reflections: Type-Attribute auslesen von dynamisch geladen Assemblies
-
Hallo Leute,
ich will Property-Attribute von dynmaisch geladen Type aus Assemblies auslesen.
Sprich, ich Lade Assembly-Files aus , lade sie "Assembly.LoadFrom(.. )" hole mir die Typen raus "GetTypes", und will dann von den Typen deren Property-Attribute auslesen, was nicht geht.
Die Typen werden geladen, nur bekomm ich keine Property-Attribute.
Wenn ich aber die Assembblies statisch in meine Anwendung referenziere, dann kann ich plötzlich die Attribute lesen!?!?
Woran liegt das?
-
Servus,
nur das ich dich richtig verstanden habe, du machst doch sowas oder?
Assembly assembly = Assembly.LoadFrom(@"C:\foo.dll"); Type[] types = assembly.GetTypes(); PropertyInfo[] properties = types[0].GetProperties();
Hast du CustomAttributes (selbsterstellte)? Dann suche direkt danach:
foreach (PropertyInfo property in properties) { object[] bla = property.GetCustomAttributes(typeof(DEINAttribute), false); }
Das führt zu einem expliziten Suchen nach dem spezifischen Attribute...
gruß
Hellsgore
-
Hallo Hellsgore , ja ich mach es genau so wie du beschrieben hast, aber danke hatte noch nen kleinen denkfehler drin
Aber jetzt ahb ich noch ne frage, folgendes:
abstract class BarBase { [FooAttrib] public object Foo {get; set;} } class Bar: BarBase { [FooAttrib] public new int Foo {get; set;} }
Wie kann ich nun erreichen, das wenn ich die Attribute von Foo in Bar auslese, nur 1 Attribute zurückgegeben wird, also das vom mit new-deklarieten Property? Weil hier werden jetzt momentan beide Properties zurückgeben.
Sprich wie kann ich via Reflection erkennen ob ein Attribute mit new- Überschrieben wurde??
grüße und danke
-
Servus,
indem du dir nur diese Properties über den Type holst:
deinType.GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public)
Stichwort: BindingFlags
Danach suchst du dann noch nach deinem Attribute, wie gehabt...
gruß
Hellsgore