internal static TypeBuilder Build(ModuleBuilder proxyModule, Type proxyType, AssemblyDebugging debugAssembly) { TypeBuilder proxyTypeBuilder = null; string proxyName = proxyType.Namespace + "." + proxyType.Name + Proxy.ProxyExtension; var iProxyType = typeof(IProxy<>).MakeGenericType(proxyType); proxyTypeBuilder = proxyModule.DefineType(proxyName, TypeAttributes.Class | TypeAttributes.Sealed | TypeAttributes.Public, proxyType, new Type[] { iProxyType }); using (TypeDebugging debugType = debugAssembly.GetTypeDebugging(proxyTypeBuilder)) { var fields = ProxyFieldBuilder.Build( proxyTypeBuilder, proxyType); ProxyConstructorBuilder.Build(proxyTypeBuilder, proxyType, fields[ProxyFieldBuilder.WrappedObjectField], fields[ProxyFieldBuilder.InvokeHandlerField], debugType); ProxyMethodBuilder.Build(proxyTypeBuilder, proxyType, iProxyType, fields[ProxyFieldBuilder.WrappedObjectField], fields[ProxyFieldBuilder.InvokeHandlerField], debugType); } return proxyTypeBuilder; }
internal static TypeBuilder Build(ModuleBuilder proxyModule, Type proxyType, AssemblyDebugging debugAssembly) { TypeBuilder proxyTypeBuilder = null; string proxyName = proxyType.Namespace + "." + proxyType.Name + Proxy.ProxyExtension; var iProxyType = typeof(IProxy <>).MakeGenericType(proxyType); proxyTypeBuilder = proxyModule.DefineType(proxyName, TypeAttributes.Class | TypeAttributes.Sealed | TypeAttributes.Public, proxyType, new Type[] { iProxyType }); using (TypeDebugging debugType = debugAssembly.GetTypeDebugging(proxyTypeBuilder)) { var fields = ProxyFieldBuilder.Build( proxyTypeBuilder, proxyType); ProxyConstructorBuilder.Build(proxyTypeBuilder, proxyType, fields[ProxyFieldBuilder.WrappedObjectField], fields[ProxyFieldBuilder.InvokeHandlerField], debugType); ProxyMethodBuilder.Build(proxyTypeBuilder, proxyType, iProxyType, fields[ProxyFieldBuilder.WrappedObjectField], fields[ProxyFieldBuilder.InvokeHandlerField], debugType); } return(proxyTypeBuilder); }
protected static TypeDebugging CreateDebuggingType( AssemblyDebugging assembly, ModuleBuilder module, string name, HashSet <Type> interfacesToImplement) { return(assembly.GetTypeDebugging(module.DefineType( assembly.Builder.GetName().Name + "." + name, TypeAttributes.Class | TypeAttributes.Sealed | TypeAttributes.Public, typeof(object)), interfacesToImplement)); }
public static void CallEqualsAfterDisposing() { AssemblyDebugging assembly = null; using (assembly = AssemblyCreationTests.CreateDebuggingAssembly("Me")) { } Assert.Throws <ObjectDisposedException>(() => assembly.GetTypeDebugging(null)); }
public static void CallDisposeAfterDisposing() { AssemblyDebugging assembly = null; using (assembly = AssemblyCreationTests.CreateDebuggingAssembly("Me")) { } assembly.Dispose(); }
protected static TypeDebugging CreateDebuggingType( AssemblyDebugging assembly, ModuleBuilder module, string name, HashSet<Type> interfacesToImplement) { return assembly.GetTypeDebugging(module.DefineType( assembly.Builder.GetName().Name + "." + name, TypeAttributes.Class | TypeAttributes.Sealed | TypeAttributes.Public, typeof(object)), interfacesToImplement); }
private static void BuildFirstType(AssemblyDebugging assembly) { using (var type = DebuggingTests.CreateDebuggingType( assembly, assembly.Builder.GetDynamicModule(assembly.Builder.GetName().Name), "FirstClass")) { DebuggingWithTwoTypesTests.BuildMethodsInType(type); } }
internal static void Build(Type target, ProxyBuilderGeneratorItems items) { Type proxyType = null; if (!BuiltProxies.Mappings.ContainsKey(target)) { using (var debugAssembly = new AssemblyDebugging(items.Assembly.GetName().Name + ".il", items.Assembly, items.SymbolDocumentWriter)) { proxyType = ProxyTypeBuilder.Build( items.Module, target, debugAssembly).CreateType(); } BuiltProxies.Mappings.Add(target, proxyType); } }
private static void BuildSecondType(AssemblyDebugging assembly) { using (var type = DebuggingTests.CreateDebuggingType( assembly, assembly.Builder.GetDynamicModule(assembly.Builder.GetName().Name), "SecondClass")) { DebuggingWithTwoTypesTests.BuildMethodsInType(type); } }