Пример #1
0
        private Contracts.IGeneratedItem CreateModelFromContract(Type type, Common.UnitType unitType, Common.ItemType itemType)
        {
            type.CheckArgument(nameof(type));

            var modelName      = CreateModelNameFromInterface(type);
            var typeProperties = ContractHelper.GetAllProperties(type);
            var interfaces     = GetInterfaces(type);
            var result         = new Models.GeneratedItem(unitType, itemType)
            {
                FullName      = CreateModelFullNameFromInterface(type),
                FileExtension = StaticLiterals.CSharpFileExtension,
            };

            result.SubFilePath = $"{result.FullName}{result.FileExtension}";
            CreateModelAttributes(type, result.Source);
            result.Add($"public partial class {modelName} : {type.FullName}");
            result.Add("{");
            result.AddRange(CreatePartialStaticConstrutor(modelName));
            result.AddRange(CreatePartialConstrutor("public", modelName));
            foreach (var item in ContractHelper.FilterPropertiesForGeneration(typeProperties))
            {
                CreateModelPropertyAttributes(type, item, result.Source);
                result.AddRange(CreateProperty(item));
            }
            result.AddRange(CreateCopyProperties(type));
            foreach (var item in interfaces.Where(e => ContractHelper.HasCopyable(e)))
            {
                result.AddRange(CreateCopyProperties(item));
            }
            result.AddRange(CreateFactoryMethods(type, false));
            result.Add("}");
            result.EnvelopeWithANamespace(CreateModelsNamespace(type), "using System;");
            result.FormatCSharpCode();
            return(result);
        }