SourceCrafter.MappingGenerator
0.23.149.51
There is a newer version of this package available.
See the version list below for details.
See the version list below for details.
dotnet add package SourceCrafter.MappingGenerator --version 0.23.149.51
NuGet\Install-Package SourceCrafter.MappingGenerator -Version 0.23.149.51
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="SourceCrafter.MappingGenerator" Version="0.23.149.51" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add SourceCrafter.MappingGenerator --version 0.23.149.51
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: SourceCrafter.MappingGenerator, 0.23.149.51"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install SourceCrafter.MappingGenerator as a Cake Addin #addin nuget:?package=SourceCrafter.MappingGenerator&version=0.23.149.51 // Install SourceCrafter.MappingGenerator as a Cake Tool #tool nuget:?package=SourceCrafter.MappingGenerator&version=0.23.149.51
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
✨ Mapper.Generator: Source generator for conversion operators and static methods
⚙️ Supports
- Assembly global mappings
- Map inherited members
- Custom static mapper methods
- Property level mapping
- Ignore mapping behaviors (Levels: assembly, class, property)
- Easy to use variants
- Extension method (Generated through assembly attributes)
var typeA = typeB.ToTypeA();
- Explicit conversion operation
var typeA = (TypeA)typeB;
- Extension method (Generated through assembly attributes)
🏛️ Scenarios
Assembly level
Recommended for unmodifiable or external classes
Attribute specification ([assembly: Map<TTarget, TSource>]
)
[assembly: Map<WindowsUser,WindowsIdentity>(nameof(GlobalMappers.MapToWindowsIdentity))]
Generated content (class <namespace>.GlobalMappers
)
namespace Test;
public static partial class GlobalMappers {
public static Test.WindowsUser ToWindowsUser(this System.Security.Principal.WindowsIdentity from)
{
return new Test.WindowsUser {
Name = from.Name,
IsAuthenticated = from.IsAuthenticated
};
}
public static System.Security.Principal.WindowsIdentity ToWindowsIdentity(this Test.WindowsUser from)
{
return Test.GlobalMappers.MapToWindowsIdentity(from);
}
}
Having a project file for a GlobalMappers
partial class
public static partial class GlobalMappers
{
public static WindowsIdentity MapToWindowsIdentity(this WindowsUser from)
{
return new(from.Name);
}
}
Class level
public partial class Role
{
public int Id { get; set; }
public string Name { get; set; } = null!;
public static explicit operator Role((int id, string name) role) => new() { Id = role.id, Name = role.name };
public static explicit operator (int id, string name)(Role role) => (role.Id, role.Name);
}
public partial class User
{
public int Count { get; set; }
}
public partial class UserBase
{
internal string FullName
{
get => $"{LastName?.Trim()}, {FirstName?.Trim()}";
set => (FirstName, LastName) = value?.Split(", ") switch
{
[{ } lastName, { } firstName] => (firstName.Trim(), lastName.Trim()),
[{ } firstName] => (firstName, null!),
_ => (null!, null!)
};
}
public string FirstName { get; set; } = null!;
public string? LastName { get; set; }
public int Age { get; set; }
}
[Map<UserDto>]
public partial class User : UserBase
{
[Ignore(Ignore.OnSource)]
public string? Unwanted { get; set; }
public DateTime DateOfBirth { get; set; }
[Map(nameof(UserDto.TotalAmount), Ignore.OnTarget)]
public double Balance { get; set; }
public List<Role> Roles { get; set; } = new();
public Role? MainRole { get; set; }
}
public partial class UserDto
{
public string FullName { get; set; } = null!;
public int Count { get; set; }
public int Age { get; set; }
public string? Unwanted { get; set; }
public DateTime DateOfBirth { get; set; }
public (int, string)[] Roles { get; set; } = Array.Empty<(int, string)>();
public (int, string) MainRole { get; set; } = default;
public decimal TotalAmount { get; set; }
}
[Map<WindowsIdentity>(nameof(GlobalMappers.MapToWindowsIdentity))]
public partial class WindowsUser
{
public string Name { get; set; } = null!;
public bool IsAuthenticated { get; set; }
}
[Map<UserDto>] public partial class User
produces:
namespace Test;
public partial class User
{
public static explicit operator Test.User(Test.UserDto from)
{
return new Test.User {
FullName = from.FullName,
Age = from.Age,
Count = from.Count,
Unwanted = from.Unwanted,
DateOfBirth = from.DateOfBirth,
Roles = from.Roles.Select(el => (Role)el).ToList(),
MainRole = (Role)from.MainRole
};
}
public static explicit operator Test.UserDto(Test.User from)
{
return new Test.UserDto {
FullName = from.FullName,
Age = from.Age,
Count = from.Count,
DateOfBirth = from.DateOfBirth,
TotalAmount = (decimal)from.Balance,
Roles = from.Roles.Select(el => ((int, string))el).ToArray(),
MainRole = ((int, string))from.MainRole
};
}
}
Map<WindowsIdentity>(nameof(GlobalMappers.MapToWindowsIdentity))] public partial class WindowsUser
produces:
namespace Test;
public partial class WindowsUser
{
public static explicit operator Test.WindowsUser(System.Security.Principal.WindowsIdentity from)
{
return new Test.WindowsUser {
Name = from.Name,
IsAuthenticated = from.IsAuthenticated
};
}
public static explicit operator System.Security.Principal.WindowsIdentity(Test.WindowsUser from)
{
return Test.GlobalMappers.MapToWindowsIdentity(from);
}
}
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. |
.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. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
.NETStandard 2.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
0.23.155.8 | 190 | 6/4/2023 |
0.23.149.62 | 137 | 5/29/2023 |
0.23.149.53 | 150 | 5/29/2023 |
0.23.149.51 | 156 | 5/29/2023 |
0.23.148.64 | 162 | 5/28/2023 |
0.23.121.82 | 147 | 5/1/2023 |
MSBuild fix for package referencing