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));
        }
        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);
        }