RSCG – StepwiseBuilderGenerator
RSCG – StepwiseBuilderGenerator
name | StepwiseBuilderGenerator |
nuget | https://www.nuget.org/packages/StepwiseBuilderGenerator/ |
link | https://github.com/Georgiy-Petrov/StepwiseBuilderGenerator |
author | Georgiy Petrov |
Generating Builder- as steps
This is how you can use StepwiseBuilderGenerator .
The code that you start with is
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net8.0</TargetFramework> <Nullable>enable</Nullable> </PropertyGroup> <PropertyGroup> <EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles> <CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath> </PropertyGroup> <ItemGroup> <PackageReference Include="StepwiseBuilderGenerator" Version="1.0.3" /> </ItemGroup> </Project>
The code that you will use is
using Builder; var pOld = new Person(); pOld.MiddleName = "G"; var pNew= pOld .SetFirstNameBld("Andrei") .SetLastNameBuilder("Ignat") .Age(55) .Build(it=>it) ; //var build = new PersonBuilder() // .WithFirstName(pOld.FirstName) // //.WithMiddleName("") // it is not into the constructor // .WithLastName(pOld.LastName) // ; //var pNew = build.Build(); System.Console.WriteLine(pNew.FullName()); System.Console.WriteLine(pOld.FullName());
using StepwiseBuilderGenerator; using System; namespace Builder; [StepwiseBuilder] public partial class Person { public Person() { new GenerateStepwiseBuilder() .AddStep<string>("SetFirstNameBld", "FirstName") .AddStep<string>("SetLastNameBuilder", "LastName") .AddStep<int>("Age") .CreateBuilderFor<Person>(); } //public Person(string firstName, string lastName) //{ // FirstName = firstName; // LastName = lastName; //} //public string FirstName { get; set; } public string? MiddleName { get; set; } //public string LastName { get; set; } public string FullName() { return FirstName + " " + MiddleName + " "+LastName; } }
The code that is generated is
using StepwiseBuilderGenerator; using System; namespace Builder; public interface IPersonSetFirstNameBld { IPersonSetLastNameBuilder SetFirstNameBld(string value); } public interface IPersonSetLastNameBuilder { IPersonAge SetLastNameBuilder(string value); } public interface IPersonAge { IPersonBuild Age(int value); } public interface IPersonBuild { Person Build(Func<Person, Person> buildFunc); } public partial class Person : IPersonSetFirstNameBld,IPersonSetLastNameBuilder,IPersonAge,IPersonBuild { public string FirstName; public string LastName; public int AgeValue; public IPersonSetLastNameBuilder SetFirstNameBld(string value) { FirstName = value; return this; } public IPersonAge SetLastNameBuilder(string value) { LastName = value; return this; } public IPersonBuild Age(int value) { AgeValue = value; return this; } public Person Build(Func<Person, Person> buildFunc) { return buildFunc(this); } public enum Steps { SetFirstNameBld, SetLastNameBuilder, Age, } } public static partial class StepwiseBuilders { public static IPersonSetFirstNameBld Person() { return new Person(); } }
Code and pdf at https://ignatandrei.github.io/RSCG_Examples/v2/docs/StepwiseBuilderGenerator
Leave a Reply