示例#1
0
        public void CreateInterceptableMethod_Adds_Fields_Methods_And_Mapping()
        {
            var moduleScope    = new ModuleScope();
            var generator      = new ProxyGenerator(moduleScope);
            var typeDefinition = generator.GetTypeDefinition(typeof(TypeScope1), null, null);

            TypeBuilder typeBulder = moduleScope.Module.DefineType(typeDefinition.FullName, typeDefinition.TypeAttributes);

            var proxyScope = new ProxyScope(moduleScope, typeBulder, typeDefinition);

            //  proxyScope.DefineTypeAndMembers();

            proxyScope.GetType().GetMethod("CreateFields", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(proxyScope, new object[0]);

            Assert.AreEqual(1, proxyScope.Fields.Count);
            Assert.AreEqual(0, proxyScope.Properties.Count);
            Assert.AreEqual(0, proxyScope.Methods.Count);

            var m = proxyScope.CreateInterceptableMethod(typeDefinition.MethodDefinitions[0], typeDefinition.MethodDefinitions[0].Method);

            Assert.AreEqual(3, proxyScope.Fields.Count);
            Assert.AreEqual("TypeScope1_Method", proxyScope.Fields[1].Name);
            Assert.AreEqual("TypeScope1_Proxy_Method", proxyScope.Fields[2].Name);

            Assert.AreEqual(2, proxyScope.Methods.Count);
            Assert.AreEqual("Method_Callback", proxyScope.Methods[0].Name);
            Assert.AreEqual("Method", proxyScope.Methods[1].Name);

            var acc = new TypeAccessor(proxyScope);

            var mappings = acc.Fields["methodMappings"].GetValue() as List <MethodMapping>;

            Assert.AreEqual(1, mappings.Count);
            Assert.AreEqual("TypeScope1_Method", mappings[0].MemberField.Name);
            Assert.AreEqual("TypeScope1_Proxy_Method", mappings[0].MethodField.Name);

            Assert.AreEqual("Method", mappings[0].Method.Name);
            Assert.AreEqual("Method", mappings[0].MethodBuilder.Name);
        }