Add initial readme content.

This commit is contained in:
Mohammadreza Taikandi 2020-12-22 08:20:49 +00:00
parent 804a0c4eb3
commit 29f96b670e
1 changed files with 86 additions and 1 deletions

View File

@ -1,2 +1,87 @@
# MapTo
An object to object mapping generator using using Roslyn code generator.
An object to object mapping generator using using [Roslyn source generator](https://github.com/dotnet/roslyn/blob/master/docs/features/source-generators.md).
## Installation
```
dotnet add package MapTo
```
## Usage
MapTo creates mappings during compile-time. To indicate which objects it needs to generate the mappings for, simply declare the class as `partial` and annotate it with `MapFrom` attribute.
```c#
[MapFrom(sourceType: typeof(App.Data.Models.User))]
public partial class UserViewModel
{
public string FirstName { get; }
public string LastName { get; }
}
```
If `Data.Models.User` class is defined as follow:
```c#
namespace App.Data.Models
{
public class User
{
public User(int id) => Id = id;
public int Id { get; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName => $"{FirstName} {LastName}";
}
}
```
It will generate the following code:
```c#
// <auto-generated />
using System;
namespace App.ViewModels
{
public partial class UserViewModel
{
public UserViewModel(App.Data.Models.User user)
{
if (user == null) throw new ArgumentNullException(nameof(user));
FirstName = user.FirstName;
LastName = user.LastName;
}
public static UserViewModel From(App.Data.Models.User user)
{
return user == null ? null : new UserViewModel(user);
}
}
public static partial class UserExtensions
{
public static UserViewModel ToUserViewModel(this App.Data.Models.User user)
{
return user == null ? null : new UserViewModel(user);
}
}
}
```
Which makes it possible to get an instance of `UserViewModel` from one of the following ways:
```c#
var user = new User(id: 10) { FirstName = "John", LastName = "Doe" };
var vm = user.ToUserViewModel();
// OR
vm = new UserViewModel(user);
// OR
vm = UserViewModel.From(user);
```