Пример #1
0
        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);
        }