Пример #1
0
        public object CreateWrapperFromType(Type templateType, MethodToProxify[] methodsToProxify, PropertyToProxify[] propsToProxify = null)
        {
            Trace.Assert(templateType != null);
              Trace.Assert(methodsToProxify != null && methodsToProxify.Length > 0);

              string ns = templateType.Assembly.FullName;
              AssemblyBuilder assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(new AssemblyName(ns), SAVE_TEST_DLL ? AssemblyBuilderAccess.RunAndSave : AssemblyBuilderAccess.Run);
              ModuleBuilder moduleBuilder = SAVE_TEST_DLL ? assemblyBuilder.DefineDynamicModule(ns, "testil.dll") : assemblyBuilder.DefineDynamicModule(ns);
              TypeBuilder wrapperBuilder = moduleBuilder.DefineType(templateType.FullName + "Proxy", TypeAttributes.Public, typeof(JishProxy), new Type[0]);
              CreateProxyConstructor(wrapperBuilder);

              for (int i = 0; i < methodsToProxify.Length; i++)
              {
            CreateProxyMethod(wrapperBuilder, i, methodsToProxify.ElementAt(i));
              }
              if (propsToProxify != null)
              {
            for (int i = 0; i < propsToProxify.Length; i++)
            {
              GenerateProxyProperty(wrapperBuilder, i, propsToProxify.ElementAt(i));
            }
              }
              Type wrapperType = wrapperBuilder.CreateType();

              if (SAVE_TEST_DLL) assemblyBuilder.Save("testil.dll");

              return Activator.CreateInstance(wrapperType, new object[] { methodsToProxify });
        }