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

            var baseItfc       = GetPersistenceBaseContract(type);
            var contractHelper = new ContractHelper(type);
            var result         = new Models.GeneratedItem(Common.UnitType.Logic, itemType)
            {
                FullName      = CreateEntityFullNameFromInterface(type),
                FileExtension = StaticLiterals.CSharpFileExtension,
            };

            result.SubFilePath = $"{result.FullName}{result.FileExtension}";
            CreateEntityAttributes(type, result.Source);
            result.Add($"partial class {contractHelper.EntityName} : {type.FullName}");
            result.Add("{");
            result.AddRange(CreatePartialStaticConstrutor(contractHelper.EntityName));
            result.AddRange(CreatePartialConstrutor("public", contractHelper.EntityName));
            foreach (var item in ContractHelper.GetEntityProperties(type).Where(p => CanCreateProperty(type, p.Name)))
            {
                var codeLines = new List <string>(CreateProperty(item));

                AfterCreateProperty(type, item, codeLines);
                result.AddRange(codeLines);
            }
            result.AddRange(CreateCopyProperties(type));
            result.AddRange(CreateEquals(type));
            result.AddRange(CreateGetHashCode(type));
            result.AddRange(CreateFactoryMethods(type, baseItfc != null));
            result.Add("}");
            result.EnvelopeWithANamespace(CreateNameSpace(type), "using System;");
            result.FormatCSharpCode();
            return(result);
        }
Пример #2
0
        private Contracts.IGeneratedItem CreateDelegateProperties(Type type, Type delegateType, string delegateObjectName, Common.UnitType unitType, Common.ItemType itemType)
        {
            type.CheckArgument(nameof(type));
            delegateType.CheckArgument(nameof(delegateType));

            var modelName      = CreateModelNameFromInterface(type);
            var typeProperties = ContractHelper.GetAllProperties(delegateType);
            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}");
            result.Add("{");
            foreach (var item in ContractHelper.FilterPropertiesForGeneration(typeProperties))
            {
                var propertyType = GetPropertyType(item);

                if (item.CanRead || item.CanWrite)
                {
                    CreateModelPropertyAttributes(delegateType, item, result.Source);
                    result.Add($"public {propertyType} {item.Name}");
                    result.Add("{");
                    if (item.CanRead)
                    {
                        result.Add($"get => {delegateObjectName}.{item.Name};");
                    }
                    if (item.CanWrite)
                    {
                        result.Add($"set => {delegateObjectName}.{item.Name} = value;");
                    }
                    result.Add("}");
                }
            }
            result.Add("}");
            result.EnvelopeWithANamespace(CreateModelsNamespace(type), "using System;");
            result.FormatCSharpCode();
            return(result);
        }
Пример #3
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);
        }