public Type Create(Type typeToProxy) { if (definedTypes.ContainsKey(typeToProxy)) { return((Type)definedTypes[typeToProxy]); } if (!HasAopDefinitions(typeToProxy)) { return(typeToProxy); } Type generatedType = generator.CreateType(type => { type.Named(typeToProxy.Name + Guid.NewGuid()); type.InheritFrom(typeToProxy); GeneratedField field = null; if (useServiceLocator) { field = type.AddField <Microsoft.Practices.ServiceLocation.IServiceLocator>("serviceLocator"); type.AddConstructor(constructor => constructor.CreateArgument <Microsoft.Practices.ServiceLocation.IServiceLocator>().AssignTo(field)); } ProxyMethods(type, typeToProxy, field); }); return(generatedType); }
public void GenerateSchema() { TypeGenerator generator = new TypeGenerator(); DataTable dtTables = null, dtColumns = null; GetSchema(out dtTables, out dtColumns); CreateTables(dtTables); CreateColumns(dtColumns); foreach (var table in tables) { table.Type = generator.CreateType(table); } }
internal void Start() { assembly.Context.Register("Console", typeof(Console)); // code.Compile(assembly); valueField = typeGen.DefineField("value", typeof(object), FieldAttributes.Private); valueField.SetCustomAttribute(typeof(DebuggerBrowsableAttribute), typeof(DebuggerBrowsableAttribute).GetInstanceCtor(typeof(DebuggerBrowsableState)), DebuggerBrowsableState.Never); // ctor var ctorParams = new ParameterInfo[] { new ParameterInfo("val", 0, typeof(object)) }; ConstructorGenerator ctorGen = typeGen.DefineCtor(ctorParams, MethodAttributes.Public); ctorGen.SyntaxBody = new BlockStatement(new NodeList <Statement> { Expression.Assign(Expression.Member("value"), Expression.Parameter(ctorParams[0])) }); EmitOpImplicit(typeGen); EmitOpAddition(typeGen); EmitToStringMethod(); typeGen.CreateType(); assembly.Save("FluidScript.Runtime.dll"); }
public void Should_Create_Empty_Class_Type() { Type generatedType = generator.CreateType(context => context.Named("TestType1")); Assert.AreEqual("TestType1", generatedType.Name); Assert.AreEqual(4, generatedType.GetMethods().Length, "Should only have types from object"); Assert.AreEqual(0, generatedType.GetProperties().Length, "Should have no properties"); Assert.AreEqual(0, generatedType.GetFields().Length, "Should have no fields"); Assert.AreEqual(1, generatedType.GetConstructors().Length, "Should have one constructor"); Assert.AreEqual(0, generatedType.GetConstructor(new Type[0]).GetParameters().Length, "Should be a default constructor"); }
public void Register(Type to, MappedType mappedType, ResolutionMap resolutionMap) { if (activators.ContainsKey(to)) { return; } var generator = new TypeGenerator(); var candidates = mappedType.Candidates; int candidateCount = candidates.Count; for (int candidateCounter = 0; candidateCounter < candidateCount; candidateCounter++) { var candidate = candidates[candidateCounter]; if (activators.ContainsKey(candidate.Type)) { continue; } var activatorType = generator.CreateType(context => { context.Named(Guid.NewGuid() + "Builder"); context.InheritFrom <SiegeActivator>(); context.OverrideMethod <SiegeActivator>(activator => activator.Instantiate(null), method => method.WithBody(body => { var instance = body.CreateVariable(to); var array = body.CreateArray(typeof(object)); array.AssignFromParameter(new MethodParameter(0)); var items = new List <ILocalIndexer>(); var parameters = candidate.Parameters; var parameterCount = parameters.Count; for (int i = 0; i < parameterCount; i++) { var info = parameters[i]; var arg1 = array.LoadValueAtIndex(info.ParameterType, body, info.Position); items.Add(arg1); } var constructorArgs = new Type[candidate.Parameters.Count]; var candidateParameters = candidate.Parameters; var candidateParameterCount = candidateParameters.Count; for (int i = 0; i < candidateParameterCount; i++) { var arg = candidateParameters[i]; constructorArgs[arg.Position] = arg.ParameterType; } instance.AssignFrom(body.Instantiate(to, constructorArgs, items.OfType <ILocalIndexer, ILocalIndexer>())); body.Return(instance); })); }); var constructor = activatorType.GetConstructor(new Type[] { }); activators.Add(candidate.Type, (SiegeActivator)constructor.Invoke(new object[] { })); } }