An open API service indexing awesome lists of open source software.

https://github.com/usausa/automapperfragmentconfig

Code generator for AutoMapper fragment config.
https://github.com/usausa/automapperfragmentconfig

automapper codegenerator mapper source-generator source-generators sourcegenerator

Last synced: 5 months ago
JSON representation

Code generator for AutoMapper fragment config.

Awesome Lists containing this project

README

          

# AutoMapperFragmentConfig

[![NuGet](https://img.shields.io/nuget/v/AutoMapperFragmentConfig.svg)](https://www.nuget.org/packages/AutoMapperFragmentConfig)

## What is this?

Configure AutoMapper locally.

## Usage

```xml



all
runtime; build; native; contentfiles; analyzers; buildtransitive


```

## ASP.NET Core Sample

```csharp
[ApiController]
[Route("[controller]/[action]")]
public class ExampleController : ControllerBase
{
private readonly IMapper mapper;

// AutoMapper settings used only in the Controller can be configured locally without creating Profile class.
[MapConfig]
public static void ConfigureMapping(IProfileExpression config, IServiceProvider provider)
{
var calc = provider.GetRequiredService();
config.CreateMap()
.ForMember(d => d.Value, o => o.MapFrom(s => calc.Calc(s.Value)));
}

public ExampleController(IMapper mapper)
{
this.mapper = mapper;
}

[HttpPost]
public IActionResult Execute([FromBody] Request request)
{
return Ok(mapper.Map(request));
}
}
```

```csharp
public static partial class AutoMapperExtensions
{
// Extension method generator for fragment config.
[MapConfigExtension]
public static partial void AddFragmentProfile(this IMapperConfigurationExpression expression, IServiceProvider provider);
}
```

```csharp
builder.Services.AddSingleton();

// Add AutoMapper with fragment config.
builder.Services.AddSingleton(static p => new Mapper(new MapperConfiguration(c => c.AddFragmentProfile(p)), p.GetService));
```

```csharp
public class Request
{
public int Value { get; set; }
}

public class Response
{
public string Value { get; set; } = default!;
}

public interface ICalc
{
int Calc(int value);
}

public class IncrementCalc : ICalc
{
public int Calc(int value) => value + 1;
}
```