public static Common.EntitiesModel.Entity[] Read(Compilation compilation)
        {
            var result = new List<Common.EntitiesModel.Entity>();

            var markAttribute =
                compilation.GetTypeByMetadataName("Generators.Common.ModelSourceAttribute");

            var visitor = new MarkedTypeVisitor(markAttribute);
            visitor.Visit(compilation.GlobalNamespace);

            foreach (var type in visitor.FoundSymbols)
            {
                var properties = type.GetMembers()
                    .OfType<IPropertySymbol>()
                    .Select(p => new Common.EntitiesModel.EntityProperty
                    {
                        Name = p.Name,
                        DataType = p.Type.ToModelDataType()
                    });

                var entity = new Common.EntitiesModel.Entity
                {
                    Name = type.Name,
                    Properties = properties.ToArray()
                };

                result.Add(entity);
            }

            return result.ToArray();
        }
예제 #2
0
        public static Common.EntitiesModel.Entity[] Read(params Assembly[] assemblies)
        {
            var result = new List <Common.EntitiesModel.Entity>();

            foreach (var assembly in assemblies)
            {
                var markedTypes = assembly
                                  .ExportedTypes
                                  .Where(t => t.GetCustomAttribute <ModelSourceAttribute>() != null);

                foreach (var type in markedTypes)
                {
                    var properties = type
                                     .GetProperties(BindingFlags.Instance | BindingFlags.Public)
                                     .Select(p => new Common.EntitiesModel.EntityProperty
                    {
                        Name     = p.Name,
                        DataType = p.PropertyType.ToModelDataType()
                    });

                    var entity = new Common.EntitiesModel.Entity
                    {
                        Name       = type.Name,
                        Properties = properties.ToArray()
                    };

                    result.Add(entity);
                }
            }

            return(result.ToArray());
        }