RSCG – Najlot.Map.SourceGenerator
| name | Najlot.Map.SourceGenerator |
| nuget | https://www.nuget.org/packages/Najlot.Map.SourceGenerator/ |
| link | https://github.com/najlot/Map |
| author | Najlot |
Generates object mapping code at compile time using source generators
This is how you can use Najlot.Map.SourceGenerator .
The code that you start with is
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<PropertyGroup>
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
<CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Najlot.Map" Version="0.2.1" />
<PackageReference Include="Najlot.Map.SourceGenerator" Version="0.2.1" />
</ItemGroup>
</Project>
The code that you will use is
using mapperDemo; using Najlot.Map; var map = new Map(); map.RegistermapperDemoMappings(); map.Validate(); var p=new Person(); p.FirstName = "Andrei"; p.LastName = "Ignat"; PersonDTO personDTO=map.From(p).To<PersonDTO>(); Console.WriteLine(personDTO.FullName);
public partial class Person
{
public int ID { get; set; }
public string? FirstName { get; set; }
public string? LastName { get; set; }
}
using Najlot.Map;
using Najlot.Map.Attributes;
namespace mapperDemo;
public partial struct PersonDTO
{
public string? FirstName { get; set; }
public string? LastName { get; set; }
public string FullName {
get
{
return FirstName + " " + LastName;
}
}
}
[Mapping]
public partial class UserMapper
{
[MapIgnoreProperty(nameof(Person.ID))]
public partial PersonDTO MapUser(Person from);
}
The code that is generated is
// <auto-generated/>
#nullable enable
namespace mapperDemo
{
partial class UserMapper
{
public partial mapperDemo.PersonDTO MapUser(Person from)
{
var result = new mapperDemo.PersonDTO();
result.FirstName = from.FirstName;
result.LastName = from.LastName;
return result;
}
}
}
// <auto-generated/>
#nullable enable
using Najlot.Map;
namespace mapperDemo
{
public static class MapRegistrationExtensions_mapperDemo
{
public static IMap RegistermapperDemoMappings(this IMap map)
{
var instance_mapperDemo_UserMapper = map.Create<global::mapperDemo.UserMapper>();
map.Register<global::Person, global::mapperDemo.PersonDTO>(instance_mapperDemo_UserMapper.MapUser);
return map;
}
}
}
Code and pdf at
https://ignatandrei.github.io/RSCG_Examples/v2/docs/Najlot.Map.SourceGenerator