private IDynamicTypeBuilder CreateDynamicTypeBuilder() { var ctorParams = new Dictionary <string, Type>(ctorExtraParamsType) { { "contractedService", targetType } }; switch (typeCategory) { case TypeCategories.Class: return(DynamicTypeBuilderFactory.CreateClassBuilder($"{targetType.Name}{namePostfix}", ctorParams, moduleBuilder)); case TypeCategories.Dto: return(DynamicTypeBuilderFactory.CreateDtoBuilder($"{targetType.Name}{namePostfix}", moduleBuilder)); case TypeCategories.Interface: return(DynamicTypeBuilderFactory.CreateInterfaceBuilder($"{targetType.Name}{namePostfix}", moduleBuilder, interfaces)); case TypeCategories.Implementation: return(DynamicTypeBuilderFactory.CreateClassBuilder($"{targetType.Name}{namePostfix}", ctorParams, moduleBuilder, interfaces)); default: throw new Exception(); } }
private static Type GenerateDynamicDtoType( string typeName, IDictionary <string, Type> propertiesNameTypeMapping) { var typeBuilder = DynamicTypeBuilderFactory.CreateDtoBuilder(typeName); foreach (var propertyName in propertiesNameTypeMapping.Keys) { typeBuilder.SetProperty(propertyName, propertiesNameTypeMapping[propertyName]); } var generatedType = typeBuilder.Build(); return(generatedType); }
public void Dynamic_Dto_Type_Must_Have_The_Specified_Attribute_On_The_Defined_Property() { var propertyName = "SomeProperty"; var attributeType = typeof(SampleAttribute); var ctorParametersValuesMapping = SampleAttribute.GetCtorParamValueMapping(); var propertiesValuesMapping = SampleAttribute.GetPropertyValueMaaping(); var typeBuilder = DynamicTypeBuilderFactory.CreateDtoBuilder(propertyName); typeBuilder .SetProperty(propertyName, typeof(string)) .SetAttribute( attributeType, ctorParametersValuesMapping, propertiesValuesMapping); var generatedType = typeBuilder.Build(); AssertOnHavingPropertyWithFollowingAttribute(generatedType, propertyName, typeof(SampleAttribute), propertiesValuesMapping); }