Пример #1
0
        private void BuildMatchType(IDynamicTypeBuilder typeBuilder, ServicePack retPack)
        {
            SetAttributes(typeBuilder, typeAttributes);

            if (typeCategory != TypeCategories.Implementation)
            {
                SetProperties(typeBuilder, retPack, targetType);

                SetMethods(typeBuilder, retPack);
            }
        }
Пример #2
0
        private void SetMethods(IDynamicTypeBuilder typeBuilder, ServicePack retPack)
        {
            var searchBindingFlags = GetSearchBindingFlags();

            var typeMethods = targetType.GetMethods(searchBindingFlags).Where(method => method.IsVirtual);

            foreach (var method in typeMethods)
            {
                var methodBuilder = typeBuilder.SetMethod(method.Name);

                SetMethodReturnType(retPack, method, methodBuilder);

                SetMethodParams(retPack, method, methodBuilder);

                SetAttributes(methodBuilder, allMembersAttributes);
            }
        }
Пример #3
0
        private void SetProperties(IDynamicTypeBuilder typeBuilder, ServicePack retPack, Type type)
        {
            var typeProps = type.GetProperties();

            foreach (var prop in typeProps)
            {
                var matchType = MapType(prop.PropertyType, retPack);

                var propertyBuilder = typeBuilder.SetProperty(prop.Name, matchType);

                SetAttributes(propertyBuilder, allMembersAttributes);

                if (matchType != prop.PropertyType)
                {
                    MapSubTypes(prop.PropertyType, retPack);
                }
            }
        }
Пример #4
0
        private void SetMethod(IDynamicTypeBuilder builder, string method1Name, Type method1ReturnType, Dictionary <Type, string> method1Params, Dictionary <Type, Tuple <IDictionary <Type, object>, IDictionary <string, object> > > setAttributeParam)
        {
            var methodBuilder = builder.SetMethod(method1Name);

            foreach (var param in method1Params)
            {
                methodBuilder.SetParameter(param.Key, param.Value);
            }

            methodBuilder.SetReturnType(method1ReturnType);

            if (setAttributeParam != null)
            {
                foreach (var attribute in setAttributeParam)
                {
                    methodBuilder.SetAttribute(attribute.Key, attribute.Value.Item1, attribute.Value.Item2);
                }
            }
        }
Пример #5
0
        private void SetMethod(
            IDynamicTypeBuilder classBuilder,
            string methodName,
            Type returnType,
            IList <Type> @params,
            IDictionary <Type, Tuple <IDictionary <Type, object>, IDictionary <string, object> > > attributes = null)
        {
            var methodBuilder = classBuilder.SetMethod(methodName);

            foreach (var param in @params)
            {
                methodBuilder.SetParameter(param);
            }

            methodBuilder.SetReturnType(returnType);

            if (attributes != null)
            {
                foreach (var attribute in attributes)
                {
                    methodBuilder.SetAttribute(attribute.Key, attribute.Value.Item1, attribute.Value.Item2);
                }
            }
        }
        private void DefineMethod(string method1, Type method1ReturnType, Type[] method1Params, IDynamicTypeBuilder interfaceBuilder)
        {
            var methodBuilder = interfaceBuilder
                                .SetMethod(method1)
                                .SetReturnType(method1ReturnType);

            foreach (var method1Param in method1Params)
            {
                methodBuilder.SetParameter(method1Param);
            }
        }