MapperGeneric 1.0.0

The owner has unlisted this package. This could mean that the package is deprecated, has security vulnerabilities or shouldn't be used anymore.
dotnet add package MapperGeneric --version 1.0.0
                    
NuGet\Install-Package MapperGeneric -Version 1.0.0
                    
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="MapperGeneric" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="MapperGeneric" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="MapperGeneric" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add MapperGeneric --version 1.0.0
                    
#r "nuget: MapperGeneric, 1.0.0"
                    
#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.
#:package MapperGeneric@1.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=MapperGeneric&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=MapperGeneric&version=1.0.0
                    
Install as a Cake Tool

Contenido

  1. [Implementacion](## 1.-Implementacion)
  2. [Demostracion](## 2.-Demostracion)
  3. [Ejemplo](## 3.-Repositorio con codigo y ejemplo)

1.-Implementacion

Para usar el Nuget debemos crear nuestras clases de Entidad de dominio en este caso como ejemplo tenemos una clase Request que dentro tiene un campo para el mensaje de rabbit a traves de la clase Rabbit.

Clase Request:

public class Request
    {
        public string Message { get; set; }

        public string Code { get; set; }

        public Rabbit Rabbit { get; set; }
    }

Clase Rabbit:

public class Rabbit
    {
        public string TraceId { get; set; }

        public string Message { get; set; }

        public string Status { get; set; } = "EXITOSO";
    }

Tendremos que crear otra clase en alguna otra capa que amerite un DTO, crearemos el DTO en base a los datos que requeramos en esta.

Clase RequestDTO:

    public class RequestDTO
    {
        public string Name { get; set; }

        public string Message { get; set; }

        public string Code { get; set; }

        public DateTime RequestDate { get; set; }

        public string RabbitTraceId { get; set; }

        public string RabbitMessage { get; set; }
    }

Aclaratorias:

  • Como podemos observar tenemos los campos 'RabbitTraceId' y 'RabbitMessage' estos seran los campos que traeran la informacion de 'Rabbit.TraceId' y 'Rabbit.Message' es muy importante que apliquemos UpperCammelCase para realizar el nombramiento de los campos en nuestro DTO, si hubieramos querido traer el dato 'Rabbit.Status' de nuestra entidad de dominio debimos colocarlo como 'RabbitStatus'.

  • Por lo anterior expuesto podemos ver que nuestro Mapper aplanara los datos, por tal se debe tener en consideracion si queremos mantener los objetos concatenados internamente aplicar alguna logia creando los DTO's necesarios para esta accion.

  • Es muy importante que la clase de creacion de nuestro DTO lleve en su nombre la palabra 'dto' tal que sea 'ClaseDTO', 'ClaseDto' o 'Clasedto', ya que servira para la reversion en el caso que necesitemos mapear un DTO a entidad.

2.-Demostracion

Podemos probar nuestro mapper creando algun objeto en base a las clases expuestas anteriormente, este se transformara en DTO y a traves de una logica de perfiles interna podra hacer el reverso, por tanto tendremos un mapper Entity → DTO y DTO → Entity.

//DTO:
var requestDTO = new RequestDTO
{
    Name = "Request",
    Message = "Request message",
    Code = "200",
    RequestDate = DateTime.Now,
    RabbitTraceId = "xxx-xxx-xxx-xxx",
    RabbitMessage = "service-ok"
};

//Entity:
var request = new Request
{
    Message = "Response message",
    Code = "404",
    Rabbit = new Rabbit
    {
        TraceId = "yyy-yyy-yyy-yyy",
        Message = "service-failed"
    }
};

var configuration = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<Request, RequestDTO>()
       .ReverseMap();
});

RequestDTO requestDTOResult = MapperGeneric<Request, RequestDTO>.Map(request);

Console.WriteLine("Entity(Request) to DTO(RequestDTO): ");
Console.WriteLine("Result DTO: "+JsonSerializer.Serialize(requestDTOResult));

Console.WriteLine("DTO(RequestDTO) to Entity(Request): ");
Request requestResult = MapperGeneric<RequestDTO, Request>.Map(requestDTO);
Console.WriteLine("Result Entity: " + JsonSerializer.Serialize(requestResult));

3.-Repositorio con codigo y ejemplo

  • Más información sobre la implementación:

Para ampliar esta documentación se presenta un wiki el cual se anexa en el siguiente enlace

Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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