//[Test] public void T() { var bclTypesParser = new BclTypesParser(); var domainBuilder = new DomainBuilder("Test.Dto", type => bclTypesParser.GetParser(type) == null); var foo = new EntityModel("Foo", new[] { new PropertyModel("Index", typeof(int)), }); var bar = new EntityModel("Bar", new List<PropertyModel>(){ new PropertyModel("Foo", foo, new List<object>()) }, new List<object>()); domainBuilder .AddEntity(foo) .AddEntity(bar); domainBuilder .Transform( model => model.Name == foo.Name, new Transformation<EntityModel>().Map( model => model.Properties, model => model.Properties.Concat(new[] { new PropertyModel<string>("Name", null, Visibility.Public) }).ToList())) .ToList(); var transformedDomain = domainBuilder.GetDomain(); var csCodeGenerator = new CsCodeGenerator(transformedDomain); var barCode = string.Join(Environment.NewLine, csCodeGenerator.GetClass(bar.Name)); var fooCode = string.Join(Environment.NewLine, csCodeGenerator.GetClass(foo.Name)); }
private static IEnumerable<string> GenerateCtor(EntityModel entity, IReadOnlyCollection<IPropertyModel> classProps) { var ctorArgs = string.Join(", ", classProps.Select(p => p.TypeFullName + " " + p.Name)); yield return $"public {entity.Name}({ctorArgs}) {{"; foreach (var prop in classProps) { yield return $"\tthis.{prop.Name} = {prop.Name};"; } yield return "}"; }
private IEnumerable<string> GetMappingCode( Type sourceType, EntityModel dstModel, IReadOnlyDictionary<PropertyModel, LambdaExpression> propsMappings) { var dstTypeName = dstModel.Name; yield return $"public static {dstTypeName} Map(this {sourceType.Name} x){{"; foreach (var mapping in propsMappings) { yield return $"\tvar {mapping.Key.Name.ToCamelCase()} = ({GetMappingCode(mapping.Value)})(x);"; } var args = dstModel.Properties.Select(model => model.Name.ToCamelCase()); yield return $"\treturn new {dstTypeName}({string.Join(", ", args)})"; yield return "}"; }