标签: mapster

具有依赖注入的 Mapster 全局配置

我想知道是否有一种方法可以在使用依赖注入时全局配置Mapster?

配置选项似乎适用于静态使用,也仅适用于单例模式。

地图大师配置

Mapster 依赖注入

我创建了一个扩展方法。

// Extension method
public static IServiceCollection AddMapster(this IServiceCollection services, Action<TypeAdapterConfig> options = null)
{
    var config = new TypeAdapterConfig();
    config.Scan(Assembly.GetAssembly(typeof(Startup)));

    options?.Invoke(config);

    services.AddSingleton(config);
    services.AddScoped<IMapper, ServiceMapper>();

    return services;
}

// Called in Startup.ConfigureServices(IServiceCollection services)
services.AddMapster(options =>
{
    options.Default.IgnoreNonMapped(true); // Does not work.
    TypeAdapterConfig.GlobalSettings.Default.IgnoreNonMapped(true); // Does not work.
});
Run Code Online (Sandbox Code Playgroud)

我想这些不起作用,因为它们ServiceMapper正在创建自己的实例而不使用我配置的任何内容。

c# dependency-injection mapster

7
推荐指数
2
解决办法
1万
查看次数

如何使用 Mapster 映射继承的类

我想通过使用以下语句在两个类之间进行映射:

var directoryDataModel = new DirectoryDM()
{
    Title = "School Directory",
    Persons = new List<PersonDM>()
    {
        new TeacherDM() { Name = "Johnson", Department = "Math" },
        new StudentDM() { Name = "Billy", Classes = new List<string>() { "Math", "Physics" } }
    }                
};
var directoryViewModel = directoryDataModel.Adapt<DirectoryVM>();
var directoryDataModel2 = directoryViewModel.Adapt<DirectoryDM>();
Run Code Online (Sandbox Code Playgroud)

我需要做什么才能处理 Persons 列表中派生类的映射?

TeacherVM <=> TeacherDM 和 StudentVM <=> StudentDM

数据模型:

public class DirectoryDM
{
    public string Title;
    public List<PersonDM> Persons;
}
public class PersonDM
{
    public string Name; …
Run Code Online (Sandbox Code Playgroud)

c# mapping mapster

6
推荐指数
1
解决办法
3758
查看次数

如何在 .NET Core 项目中获取类库程序集引用?

我有一个 ASP.NET Core 项目 (netcoreapp2.0),它引用类库项目 (netstandard2.0) 中的模型。我正在尝试使用 Mapster 来映射存储在类库中的对象。Mapster 的文档说使用以下代码从 Startup.cs 调用 Scan 方法:

TypeAdapterConfig.GlobalSettings.Scan(assembly1, assembly2, assemblyN)
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是如何最好地获取类库的程序集引用以传递给 Scan 方法。我认为这更像是一个一般的 .NET 问题,而不是特定于 Mapster 的问题。我能想到的最好的是以下内容,但感觉很尴尬。

private Assembly GetAssemblyByName(string name)
{
    var assemblies = Assembly.GetEntryAssembly().GetReferencedAssemblies();
    var assemblyName = assemblies.FirstOrDefault(i => i.Name == name);
    var assembly = Assembly.Load(assemblyName);
    return assembly;
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来处理这个问题?

更新:显然我上面的解决方案破坏了代码优先迁移。任何人都可以建议一种方法来实现这一目标吗?

.net system.reflection .net-core asp.net-core mapster

4
推荐指数
1
解决办法
2046
查看次数

如何使用 Mapster 创建可重复使用的映射配置文件?

我有一个 .Net 5 Web Api 项目并想使用

地图大师 v7.2.0

以避免手动映射对象。以下代码显示了示例场景

  • 设置映射配置
  • 来自多个来源的地图
  • 映射到具有不同名称的字段

[ApiController]
[Route("[controller]")]
public class MyController : ControllerBase
{
    [HttpGet]
    public ActionResult<UsernameWithTodoTitle> Get()
    {
        TypeAdapterConfig<(User, Todo), UsernameWithTodoTitle>
            .NewConfig()
            .Map(dest => dest, src => src.Item1) // map everything from user
            .Map(dest => dest, src => src.Item2) // map everything from todo
            .Map(dest => dest.TodoTitle, src => src.Item2.Title); // map the special fields from todo
        
        var user = new User { Username = "foo", FieldFromUser = "x" };
        var todo …
Run Code Online (Sandbox Code Playgroud)

c# .net-core mapster .net-5

4
推荐指数
1
解决办法
8864
查看次数

Mapster - 如何忽略空属性的映射

我正在使用 Mapster 将 Dto 实例映射到 Model 对象。

Dto 由 Javascript 客户端发送,仅发送更新的属性。

我想忽略空值,并让 Mapster 对此属性保留模型实例不变。

一个简化的示例可以更好地解释该场景:

// My .Net Dto class, used for client/server communication.
public class PersonDto
{
  public string Id { get; set; }
  public string Name { get; set; }
  public string Family { get; set; }
}

// My Model class. Let's assume is the same data as per the Dto.
public class Person
{
  public string Id { get; set; }
  public string Name { get; …
Run Code Online (Sandbox Code Playgroud)

c# mapping mapster

3
推荐指数
1
解决办法
1万
查看次数

Mapper Mapster - 如何对配置进行单元测试?

我来这里是因为我在网上找不到答案:/

我想测试我的 Mapster 配置以避免在开发时发生错误映射。但我不知道如何使用 Mapster lib 来实现它。

有什么线索吗?

问候,

.net unit-testing mapper mapster .net-6.0

2
推荐指数
1
解决办法
2182
查看次数

Mapster 将多个对象映射到一个对象

我在 Visual Studio 中使用 Mapster 和 C#,并且需要将三个对象映射到一个对象。有人这样做过吗,有例子吗?Mapster 说它有这种能力,但我无法让它工作。谢谢。

c# mapster

1
推荐指数
1
解决办法
6645
查看次数

Mapster 未绘制地图

我将 Mapster 与 DI 结合使用,并尝试映射从 WS 收到的对象。我正在遵循本指南https://github.com/MapsterMapper/Mapster/wiki/Dependency-Injection#mapping

我注册了TypeAdapterConfig和ServiceMapper

var config = new TypeAdapterConfig();
services.AddSingleton(config);
services.AddScoped<IMapper, ServiceMapper>();
Run Code Online (Sandbox Code Playgroud)

黑名单类包含卡片集合,但 Web 服务返回长数组,我将其重新映射到对象。

public class BlacklistMapper : IRegister
{
    void IRegister.Register(TypeAdapterConfig config)
    {
        config.NewConfig<long, Internal.BlacklistCard>()
            .Map(dest => dest.Cuid, source => source);

        config.NewConfig<SzWebService.BlackList, Internal.Blacklist>()
            .Map(dest => dest.Id, source => source.iBlacklistId)
            .Map(dest => dest.Crc, source => source.iBlackListCRC)
            .Map(dest => dest.Cards, source => source.lCuid);
    }
}
Run Code Online (Sandbox Code Playgroud)

在构造函数中注入映射器

 private readonly IMapper _mapper;

 public Service(IMapper mapper)
 {
     _logger = logger;
 }
Run Code Online (Sandbox Code Playgroud)

最后像这样称呼它

_mapper.Map<Blacklist>(response.mBlackListData)
Run Code Online (Sandbox Code Playgroud)

结果始终是具有默认值的对象

c# mapster

1
推荐指数
1
解决办法
5328
查看次数

Mapster,尝试映射到具有许多没有默认值的构造函数的类的字段,但失败

我正在尝试学习Mapster。我有这样的课程

class In
{
    public string A;
    public string B;
    public string C;
}

class Out
{
    public Sub Sub;
    public string C;
}

class Sub
{
    public string A; 
    public string B;
    
    public Sub(string a, string b)
        =>(A,B) = (a,b);
}
Run Code Online (Sandbox Code Playgroud)

创建配置:

var mapper = new Mapper();

mapper.Config
    .ForType<In, Out>()
    .Map(@out => @out.C, @in=> @in.C)
    .Map(@out=> @out.Sub, @in => new Sub(@in.A, @in.B));
Run Code Online (Sandbox Code Playgroud)

现在,如果我尝试映射对象 - 一切都可以,但是如果我向Sub类添加第二个构造函数

class Sub
{
    public string A; 
    public string B;
    
    public Sub(string a, …
Run Code Online (Sandbox Code Playgroud)

.net c# mapster

0
推荐指数
1
解决办法
7545
查看次数