TenJames.CompMap
0.0.2
See the version list below for details.
dotnet add package TenJames.CompMap --version 0.0.2
NuGet\Install-Package TenJames.CompMap -Version 0.0.2
<PackageReference Include="TenJames.CompMap" Version="0.0.2" />
<PackageVersion Include="TenJames.CompMap" Version="0.0.2" />
<PackageReference Include="TenJames.CompMap" />
paket add TenJames.CompMap --version 0.0.2
#r "nuget: TenJames.CompMap, 0.0.2"
#:package TenJames.CompMap@0.0.2
#addin nuget:?package=TenJames.CompMap&version=0.0.2
#tool nuget:?package=TenJames.CompMap&version=0.0.2
CompileMapper (TenJames.CompMap)
CompMap is a C# Roslyn-based source generator that automatically creates mapping methods between classes. It simplifies the process of converting one class type to another by generating the necessary code at compile time.
Ensure your DTO's are correctly mapped with compile time safety, to ensure valid changes are tracked in your project.
//generated UserReadDto.g.cs
// <auto-generated/>
using System;
using System.Collections.Generic;
using TenJames.CompMap.Mappper;
namespace TenJames.CompMap.Example;
partial class UserReadDto
{
///<summary>
/// The following properties were not mapped because they do not exist in the target class
///</summary>
internal class UserUnmappedProperties
{
/// <summary>
/// Found at /Entitities.cs at 29
/// </summary>
public required string Title { get; set; }
}
private static partial UserUnmappedProperties GetUserUnmappedProperties(IMapper mapper, User source);
/// <summary>
/// Mapping method generated by TenJames.CompMap
/// </summary>
public static UserReadDto MapFrom(IMapper mapper, User source)
{
// Note: Some properties were not mapped due to missing counterparts in the target class.
var unmapped = GetUserUnmappedProperties(mapper, source);
return new UserReadDto
{
Id = source.Id,
a Name = source.Name,
Guid = source.Guid,
Documents = mapper.Map<ICollection<DocumentDto> >(source.Documents),
Title = unmapped.Title,
};
}
}
Which can be generated simply from:
using TenJames.CompMap.Attributes;
// Entity
public class User {
public int Id { get; set; }
public string Name { get; set; }
public Guid Guid { get; set; }
public ICollection<Document> Documents { get; set; }
}
// DTOs
[MapFrom(typeof(User))]
public partial class UserReadDto {
public int Id { get; set; }
public string Name { get; set; }
public Guid Guid { get; set; }
public required string Title { get; set; }
public ICollection<DocumentDto> Documents { get; set; }
//Compile time ensurence of type safety
private static partial UserUnmappedProperties GetUserUnmappedProperties(IMapper mapper, User source)
{
return new UserUnmappedProperties()
{
// All using Easy to use Mapping methods
Title = source.Name + "'s Title",
};
}
}
Getting started
Install the TenJames.CompMap package via NuGet:
dotnet add package TenJames.CompMap
Ensure its correclty referenced in your project file:
<ProjectReference
Include="TenJames.CompMap"
Version="0.0.2"
ReferenceOutputAssembly="false"
OutputItemType="Analyzer"
/>
Component registration
If you are using dependency injection, register the mapping services in your DI container:
using TenJames.CompMap.Mapper;
...
// Feel free to try with Extending BaseMap for custom mapping logic
services.AddTransient<IMapper, BaseMap>();
Usage
Add Attributes to your DTO classes and then enjoy the generated mapping methods 😃
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.CodeAnalysis.CSharp (>= 4.3.0)
- Microsoft.CodeAnalysis.CSharp.Workspaces (>= 4.3.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.