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;
        }
Exemple #2
0
        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);
        }
Exemple #7
0
 private static void BuildFirstType(AssemblyDebugging assembly)
 {
     using (var type = DebuggingTests.CreateDebuggingType(
                assembly, assembly.Builder.GetDynamicModule(assembly.Builder.GetName().Name),
                "FirstClass"))
     {
         DebuggingWithTwoTypesTests.BuildMethodsInType(type);
     }
 }
Exemple #8
0
        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);
     }
 }
        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);
            }
        }