MapsterMapper / MapsterMapper/Mapster

Generated Mapster.Tool mappers fails Dependency Injection

Open
#424 4 comments 1 reaction 1 assignee View on GitHub

@andrerav is already working on this.

Since Jan 29, 2023.

bug
Dominant language
C#
Stars
5.2k
Forks
410
Avg merge
2d 12h
Merged PRs (30d)
6

Description

### Problem
I'm working on a project that encodes and decodes a hash for primary keys (according to https://hashids.org/). However when generating mapper source files that uses Dependency Injection in the mapper config the generated mapper class fails with the exception:
`Mapping must be called using ServiceAdapter`

Reading the source there is no `ServiceProvider` set in the parameters of `MapContext.Current` for source generated mappers calls like `ServiceMapper` does for runtime generated mappers:
```
public override TDestination Map(object source)
{
using var scope = new MapContextScope();
scope.Context.Parameters[DI_KEY] = _serviceProvider;
return base.Map(source);
}
```

How can this problem be solved?

### My Setup
**Project .csproj (here copied from Wiki)**
```




```
**Mapper interface**
```
[Mapper]
public interface IMyDataMapper : IMapper
{
}
```
**Mapper config**
```
internal class MyDataDTOMapperConfig : IRegister
{
public void Register(TypeAdapterConfig config)
{
config.NewConfig()
Map(dest => dest.Id, src => MapContext.Current.GetService().Encode(src.Id));

config.NewConfig()
.Map(dest => dest.Id, src => MapContext.Current.GetService().DecodeSingle(src.Id));
}
}
```

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.