reflection
-
Hallo Forum!
Eine Frage: Ist es möglich in c# per Assembly bzw- Reflection einer Dynamisch erzeugten Methode ein Attribut zu zuordnen?
Mit diesem Code erstelle ich einen neuen Typen, also wenn ich GenerateType mit "meineKlasse" instanziere, wird ein Type "meineKlasse" zurückgegeben.
public class GenerateType { Type type; public Type MyType { get { return this.type; } } public GenerateType(string name) { // Abrufen der aktuellen Anwendungsdomäne AppDomain dom = AppDomain.CurrentDomain; // Erstellen einer neuen Assembly AssemblyName assembly = new AssemblyName(); assembly.Name = "TempAssembly"; AssemblyBuilder assBuilder = dom.DefineDynamicAssembly(assembly, AssemblyBuilderAccess.Run); // Erzeugen eines Moduls in der Assembly ModuleBuilder modBuilder = assBuilder.DefineDynamicModule("NewModule"); // Erzeugen eines Typen im Modul TypeBuilder tBuilder = modBuilder.DefineType("DynamicClass", TypeAttributes.Public); // Dem neuen Typ eine Methode hinzufügen MethodBuilder mBuilder = tBuilder.DefineMethod("MyDynamicMethod", MethodAttributes.Public, null, null); // Erzeugen des IL-Codes ILGenerator ilGen = mBuilder.GetILGenerator(); ilGen.EmitWriteLine("In der dynamischen Methode."); ilGen.Emit(OpCodes.Ret); // Type festlegen type = tBuilder.CreateType(); } }
Dann erzeuge ich meine neue dynamische Klasse
class Program { static void Main(string[] args) { GenerateType gen = new GenerateType(); Type type = gen.MyType; // Erstellen des neuen Typs object obj = Activator.CreateInstance(type); // die neue Methode referenzieren MethodInfo dynMethod = type.GetMethod("MyDynamicMethod"); // Aufruf der dynamisch erzeugten Methode dynMethod.Invoke(obj, null); Console.ReadLine(); } }
Es ist möglich eine dynamische Klasse zu erzeugen und eine dynmaische Methode auch. Trotz langer Suche habe ich kein Beispiel gefunden, wie ich ein Attribut dynamisch erzeuge. Bin für jeden Tipp dankbar
Gruß
-
Hallo,
ich vereinfache nochmal meine Frage:
-ist es prinzipiell möglich einer dynamisch erzeugten klasse beleibig viele attribute zuzuordnen?
-wenn ja wie? wonach soll ich suchen : reflection , assembly , properties?Sorry für den doppelpost aber ich komme echt nicht weiter..
Gruß
-
Evtl. hilft dir ja die Klasse "CustomAttributeBuilder" weiter?
-
Schau die mal MethodBuilder.SetCustomAttribute(...) in der MSDN an.
-
http://msdn2.microsoft.com/en-us/library/system.reflection.emit.customattributebuilder(VS.71).aspx
Danke hiermit klappt des!Gruß