public List <T> GetTableByObjectType <T>(string tableName = null) where T : class { tableName = tableName ?? typeof(T).Name; var dt = _db.Select($"SELECT * FROM {tableName}"); return(DynamicClassLoader.LoadObjectList <T>(dt)); }
public void SimpleClassTest() { // public class SimpleClass { // public SimpleClass() { // } // } var typeSystem = new Library(new String[0]); var typeBuilder = typeSystem.defineType("stab/SimpleClass"); typeBuilder.setPublic(true); typeBuilder.setBaseType(typeSystem.getType("java/lang/Object")); createDefaultConstructor(typeBuilder); var bytecode = typeBuilder.createType(typeSystem); saveBytecode("SimpleClass", bytecode); var loader = new DynamicClassLoader(); Class <?> c = loader.defineClass("stab.SimpleClass", bytecode); loader.linkClass(c); var cstr = c.getConstructor(); cstr.newInstance(); }
public void classWithStaticFieldTest() { // public class ClassWithStaticField { // public static int FIELD = 123; // public ClassWithStaticField() { // } // } var typeSystem = new Library(new String[0]); var typeBuilder = typeSystem.defineType("stab/ClassWithStaticField"); typeBuilder.setPublic(true); typeBuilder.setBaseType(typeSystem.getType("java/lang/Object")); var field = typeBuilder.defineField("FIELD", typeSystem.IntType); field.setPublic(true); field.setStatic(true); field.setValue(new Integer(123)); createDefaultConstructor(typeBuilder); var bytecode = typeBuilder.createType(typeSystem); saveBytecode("ClassWithStaticField", bytecode); var loader = new DynamicClassLoader(); var c = loader.defineClass("stab.ClassWithStaticField", bytecode); loader.linkClass(c); var f = c.getField("FIELD"); int value = f.getInt(null); Assert.assertEquals(123, value); }
public void genericClassTest() { // public class GenericClass<T> { // public T field; // public GenericClass(T t) { // this.field = t; // } // } var typeSystem = new Library(new String[0]); var typeBuilder = typeSystem.defineType("stab/GenericClass"); typeBuilder.setPublic(true); typeBuilder.setBaseType(typeSystem.getType("java/lang/Object")); var t = typeBuilder.addGenericArgument("T"); var field = typeBuilder.defineField("field", t); field.setPublic(true); var methodBuilder = typeBuilder.defineMethod("<init>"); methodBuilder.setPublic(true); methodBuilder.setReturnType(typeSystem.VoidType); methodBuilder.addParameter(t).setName("t"); var generator = methodBuilder.getCodeGenerator(); generator.beginScope(); generator.emit(Opcode.Aload, generator.getLocal("this")); generator.emit(Opcode.Invokespecial, typeBuilder.BaseType.getMethod("<init>", Query.empty <TypeInfo>())); generator.emit(Opcode.Aload, generator.getLocal("this")); generator.emit(Opcode.Aload, generator.getLocal("t")); generator.emit(Opcode.Putfield, field); generator.emit(Opcode.Return); generator.endScope(); var bytecode = typeBuilder.createType(typeSystem); saveBytecode("GenericClass", bytecode); var loader = new DynamicClassLoader(); var c = loader.defineClass("stab.GenericClass", bytecode); loader.linkClass(c); var cstr = c.getConstructor(typeof(Object)); var f = c.getField("field"); var instance = cstr.newInstance("TEST"); Assert.assertEquals("TEST", f.get(instance)); }
public void classWithFieldTest() { // public class ClassWithField { // public int field; // public ClassWithField() { // field = 123; // } // } var typeSystem = new Library(new String[0]); var typeBuilder = typeSystem.defineType("stab/ClassWithField"); typeBuilder.setPublic(true); typeBuilder.setBaseType(typeSystem.getType("java/lang/Object")); var field = typeBuilder.defineField("field", typeSystem.IntType); field.setPublic(true); var methodBuilder = typeBuilder.defineMethod("<init>"); methodBuilder.setPublic(true); methodBuilder.setReturnType(typeSystem.VoidType); var generator = methodBuilder.getCodeGenerator(); generator.beginScope(); generator.emit(Opcode.Aload, generator.getLocal("this")); generator.emit(Opcode.Invokespecial, typeBuilder.BaseType.getMethod("<init>", Query.empty <TypeInfo>())); generator.emit(Opcode.Aload, generator.getLocal("this")); generator.emit(Opcode.Ldc, (Object)123); generator.emit(Opcode.Putfield, field); generator.emit(Opcode.Return); generator.endScope(); var bytecode = typeBuilder.createType(typeSystem); saveBytecode("ClassWithField", bytecode); var loader = new DynamicClassLoader(); var c = loader.defineClass("stab.ClassWithField", bytecode); loader.linkClass(c); var cstr = c.getConstructor(); var f = c.getField("field"); var instance = cstr.newInstance(); int value = f.getInt(instance); Assert.assertEquals(123, value); }
public void staticInnerClassTest() { // public class StaticInnerClass { // public static class Nested { // public Nested() { // } // } // public StaticInnerClass() { // } // } var typeSystem = new Library(new String[0]); var typeBuilder = typeSystem.defineType("stab/StaticInnerClass"); typeBuilder.setPublic(true); typeBuilder.setBaseType(typeSystem.getType("java/lang/Object")); createDefaultConstructor(typeBuilder); var nestedType = typeBuilder.defineNestedType("Nested"); nestedType.setPublic(true); nestedType.setNestedPublic(true); nestedType.setBaseType(typeSystem.getType("java/lang/Object")); createDefaultConstructor(nestedType); var bytecode = typeBuilder.createType(typeSystem); saveBytecode("StaticInnerClass", bytecode); var innerBytecode = nestedType.createType(typeSystem); saveBytecode("StaticInnerClass$Nested", innerBytecode); var loader = new DynamicClassLoader(); var c = loader.defineClass("stab.StaticInnerClass", bytecode); var nc = loader.defineClass("stab.StaticInnerClass$Nested", innerBytecode); loader.linkClass(c); loader.linkClass(nc); var cstr = c.getConstructor(); cstr.newInstance(); var ncstr = nc.getConstructor(); ncstr.newInstance(); }
public void classWithFieldTest() { // public class ClassWithField { // public int field; // public ClassWithField() { // field = 123; // } // } var typeSystem = new Library(new String[0]); var typeBuilder = typeSystem.defineType("stab/ClassWithField"); typeBuilder.setPublic(true); typeBuilder.setBaseType(typeSystem.getType("java/lang/Object")); var field = typeBuilder.defineField("field", typeSystem.IntType); field.setPublic(true); var methodBuilder = typeBuilder.defineMethod("<init>"); methodBuilder.setPublic(true); methodBuilder.setReturnType(typeSystem.VoidType); var generator = methodBuilder.getCodeGenerator(); generator.beginScope(); generator.emit(Opcode.Aload, generator.getLocal("this")); generator.emit(Opcode.Invokespecial, typeBuilder.BaseType.getMethod("<init>", Query.empty<TypeInfo>())); generator.emit(Opcode.Aload, generator.getLocal("this")); generator.emit(Opcode.Ldc, (Object)123); generator.emit(Opcode.Putfield, field); generator.emit(Opcode.Return); generator.endScope(); var bytecode = typeBuilder.createType(typeSystem); saveBytecode("ClassWithField", bytecode); var loader = new DynamicClassLoader(); var c = loader.defineClass("stab.ClassWithField", bytecode); loader.linkClass(c); var cstr = c.getConstructor(); var f = c.getField("field"); var instance = cstr.newInstance(); int value = f.getInt(instance); Assert.assertEquals(123, value); }
public List <Soldier> GetListOfSoldiers() { var soldiers = new List <Soldier>(); var dt = _db.Select("SELECT * FROM ViewSoldier"); foreach (DataRow dr in dt?.Rows) { var soldier = DynamicClassLoader.LoadClass <Soldier>(dr); soldier.Role = new Role { ID = int.Parse(dr["RoleID"].ToString()), Title = dr["RoleTitle"].ToString() }; soldier.Rank = new Rank { ID = int.Parse(dr["RankID"].ToString()), Title = dr["RankTitle"].ToString() }; soldier.MainProfession = new Profession { ID = int.Parse(dr["MainProfessionID"].ToString()), Title = dr["MainProfessionTitle"].ToString() }; soldier.SecondaryProfession = new Profession { ID = int.Parse(dr["SecondaryProfessionID"].ToString()), Title = dr["SecondaryProfessionTitle"].ToString() }; soldier.CombatInlay = new ArmoredVessels { ID = int.Parse(dr["ArmoredVesselsID"].ToString()), Name = dr["ArmoredVesselsName"].ToString(), Capacity = int.Parse(dr["ArmoredVesselsCapacity"].ToString()), }; soldier.Subunit = new Subunit { ID = int.Parse(dr["SubunitID"].ToString()), Name = dr["SubunitName"].ToString() }; soldiers.Add(soldier); } return(soldiers); }
static void Main(string[] args) { // var s = new Storage( // "random.db"); // s.load(); // s.addElement("MyClass", new Dictionary<string, object>() // { // {"p1", 2}, // {"Id", Guid.NewGuid()} // }); return; const string code = "using System;using System.IO;using System.ComponentModel.DataAnnotations;using System.ComponentModel.DataAnnotations.Schema;namespace GeneratedClasses{[Table(\"tableName\")]public class Helper{public int func(){return 4;}}}" ; string baseDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); string templatePath = Path.Combine(baseDir, "Template/ClassTemplate.liquid"); dynamic o = DynamicClassLoader.createDynamicInstance(code, "GeneratedClasses.Helper"); Console.Out.WriteLine(o.func()); }
public void SimpleClassTest() { // public class SimpleClass { // public SimpleClass() { // } // } var typeSystem = new Library(new String[0]); var typeBuilder = typeSystem.defineType("stab/SimpleClass"); typeBuilder.setPublic(true); typeBuilder.setBaseType(typeSystem.getType("java/lang/Object")); createDefaultConstructor(typeBuilder); var bytecode = typeBuilder.createType(typeSystem); saveBytecode("SimpleClass", bytecode); var loader = new DynamicClassLoader(); Class<?> c = loader.defineClass("stab.SimpleClass", bytecode); loader.linkClass(c); var cstr = c.getConstructor(); cstr.newInstance(); }
public void genericClassTest() { // public class GenericClass<T> { // public T field; // public GenericClass(T t) { // this.field = t; // } // } var typeSystem = new Library(new String[0]); var typeBuilder = typeSystem.defineType("stab/GenericClass"); typeBuilder.setPublic(true); typeBuilder.setBaseType(typeSystem.getType("java/lang/Object")); var t = typeBuilder.addGenericArgument("T"); var field = typeBuilder.defineField("field", t); field.setPublic(true); var methodBuilder = typeBuilder.defineMethod("<init>"); methodBuilder.setPublic(true); methodBuilder.setReturnType(typeSystem.VoidType); methodBuilder.addParameter(t).setName("t"); var generator = methodBuilder.getCodeGenerator(); generator.beginScope(); generator.emit(Opcode.Aload, generator.getLocal("this")); generator.emit(Opcode.Invokespecial, typeBuilder.BaseType.getMethod("<init>", Query.empty<TypeInfo>())); generator.emit(Opcode.Aload, generator.getLocal("this")); generator.emit(Opcode.Aload, generator.getLocal("t")); generator.emit(Opcode.Putfield, field); generator.emit(Opcode.Return); generator.endScope(); var bytecode = typeBuilder.createType(typeSystem); saveBytecode("GenericClass", bytecode); var loader = new DynamicClassLoader(); var c = loader.defineClass("stab.GenericClass", bytecode); loader.linkClass(c); var cstr = c.getConstructor(typeof(Object)); var f = c.getField("field"); var instance = cstr.newInstance("TEST"); Assert.assertEquals("TEST", f.get(instance)); }