private void BuildMatchType(IDynamicTypeBuilder typeBuilder, ServicePack retPack) { SetAttributes(typeBuilder, typeAttributes); if (typeCategory != TypeCategories.Implementation) { SetProperties(typeBuilder, retPack, targetType); SetMethods(typeBuilder, retPack); } }
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); } }
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); } } }
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); } } }
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); } }