MapsterMapper/Mapster

mapster tool generates non-public interface method/property implementation

Open

#399 opened on Jan 5, 2022

View on GitHub
 (1 comment) (0 reactions) (1 assignee)C# (312 forks)batch import
bughelp wanted

Repository metrics

Stars
 (3,995 stars)
PR merge metrics
 (Avg merge 12d 15h) (10 merged PRs in 30d)

Description

When generating mapper from interface containing mapping method/property with internal classes mapster tool generates internal implementation of this method/property

  • Mapster.Core v1.2.0
  • mapster.tool v8.2.1
  • executed on net5
[Mapper(IsInternal = true)]
internal interface IMyMappers
{
    PocoDto Map(Poco source);

    Expression<Func<Poco, PocoDto>> ProjectToDto { get; }
}

public record Poco(string Name, string Description);

internal record PocoDto(string Name, string Description);

Generated mapper class is:

internal partial class MyMappers : IMyMappers
{
    internal Expression<Func<Poco, PocoDto>> ProjectToDto => p1 => new PocoDto(p1.Name, p1.Description);
    internal PocoDto Map(Poco p2)
    {
        return p2 == null ? null : new PocoDto(p2.Name, p2.Description);
    }
}

CS0737: 'MyMappers.Map(Poco)' cannot implement an interface member because it is not public. CS0737: 'MyMappers.ProjectToDto' cannot implement an interface member because it is not public.

Maybe internal class with proper implementations should be generated even in case MapperAttribute.IsInternal hasn't been specified

Contributor guide