首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mapster非映射

Mapster非映射
EN

Stack Overflow用户
提问于 2022-01-05 14:40:27
回答 1查看 1.9K关注 0票数 1

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

我注册了TypeAdapterConfig和ServiceMapper

代码语言:javascript
复制
var config = new TypeAdapterConfig();
services.AddSingleton(config);
services.AddScoped<IMapper, ServiceMapper>();

黑名单类包含卡片的集合,但是webservice返回的数组是long,这是我重新映射到对象的。

代码语言:javascript
复制
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);
    }
}

在构造器中注入映射器

代码语言:javascript
复制
 private readonly IMapper _mapper;

 public Service(IMapper mapper)
 {
     _logger = logger;
 }

最后这样称呼它

代码语言:javascript
复制
_mapper.Map<Blacklist>(response.mBlackListData)

结果总是带有默认值的对象。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-05 14:45:03

步骤1-通过实现创建配置

代码语言:javascript
复制
public class BlacklistMapper : IRegister
{
    void Register(TypeAdapterConfig config)
    {
        config.NewConfig<SzWebService.BlackList, Internal.Blacklist>()
            .Map(...)
            .Map(...);
    }
}

步骤2-注册配置

您可以显式注册配置:

代码语言:javascript
复制
var config = new TypeAdapterConfig();

// Explicitly apply a specific configuration
config.Apply(new BlackListMapper());

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

或者让Mapster扫描您的程序集以获得IRegister实现:

代码语言:javascript
复制
// Scan & apply IRegisters automatically.
config.Scan(Assembly.GetExecutingAssembly()); 
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70594763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档