asp.net-core - 这是使用 Mapper 映射实体和 dto 的正确方法吗?
问题描述
我有一个作为服务的层并添加了一个作为映射器的类,我想把我所有的映射放在这里。我正在使用 asp.net core 5 和 Mapster 进行映射,我做对了吗?这是我的代码:
public class Mapping
{
public static void InitializeAutomapper()
{
TypeAdapterConfig<BookMark, BookMarkDTO>.ForType().Map(dest => dest.Id, src => src.Id);
TypeAdapterConfig<Category, CategoryDTO>.ForType().Map(dest => dest.Id, src => src.Id);
TypeAdapterConfig<Comment, CommentDTO>.ForType().Map(dest => dest.Id, src => src.Id);
TypeAdapterConfig<Like, LikeDTO>.ForType().Map(dest => dest.Id, src => src.Id);
TypeAdapterConfig<Post, PostDTO>.ForType().Map(dest => dest.Id, src => src.Id);
TypeAdapterConfig<Role, RoleDTO>.ForType().Map(dest => dest.Id, src => src.Id);
TypeAdapterConfig<Status, StatusDTO>.ForType().Map(dest => dest.Id, src => src.Id);
TypeAdapterConfig<Tag, TagDTO>.ForType().Map(dest => dest.Id, src => src.Id);
TypeAdapterConfig<User, UserDTO>.ForType().Map(dest => dest.Id, src => src.Id);
}
}
解决方案
这是不对的...如果编译器没有对您大喊大叫...那么 IDE 本身就有问题。
据我所见,似乎我们想用 Mapster 创建一个映射配置。像这样做:
// Somewhere we could access IServiceCollection
var config = new TypeAdapterConfig();
config.NewConfig<BookMark, BookMarkDTO>.ForType().Map(dest => dest.Id, src => src.Id);
config.NewConfig<Category, CategoryDTO>.ForType().Map(dest => dest.Id, src => src.Id);
config.NewConfig<Comment, CommentDTO>.Map(dest => dest.Id, src => src.Id);
config.NewConfig<Like, LikeDTO>.Map(dest => dest.Id, src => src.Id);
config.NewConfig<Post, PostDTO>.Map(dest => dest.Id, src => src.Id);
config.NewConfig<Role, RoleDTO>.Map(dest => dest.Id, src => src.Id);
config.NewConfig<Status, StatusDTO>.Map(dest => dest.Id, src => src.Id);
config.NewConfig<Tag, TagDTO>.Map(dest => dest.Id, src => src.Id);
config.NewConfig<User, UserDTO>.Map(dest => dest.Id, src => src.Id);
// Register config as singleton, ServiceMapper as scope.
services.AddSingleton(config);
// Make sure we have Mapster.DependencyInjection package installed
services.AddScoped<IMapper, ServiceMapper>();
// Using it be like
public IActionResult MapsterStaticMappingTest([FromServices] MapsterMapper.IMapper mapper)
{
var book = new BookMark();
var bookMap = mapper.From(book).AdaptToType<BookMarkDTO>();
return Ok(bookMap);
}
该代码是在 .Net 5、Mapster 7.2.0 上编写的
更新
当我回顾 Mapster 源时,public static class TypeAdapterConfig<TSource, TDestination>
那里有一个新的...我不记得上次我看它的时候...所以这是我的错...您的代码是完全有效的。
请注意,静态类在GlobalSettingsTypeAdapterConfig<TSource, TDestination>
下进行所有更改。如果我们不使用直接依赖于具体类型的 some ,它会站在那里,仍然什么都不做。ServiceMapper
TypeAdapterConfig
推荐阅读
- arrays - 二维字符串数组,其中第一个索引是行和第二个单词
- c++ - Finding greatest power devisor using recursion?
- jquery - 在焦点上显示 div,但在单击页面上的任意位置时关闭
- angular - 另一个文件中的模块“AnotherModule”导入了意外的值“文件中的模块”。请添加@NgModule 注释
- markdown - 如何仅为源格式换行
- sql - 使用 GROUP BY 的情况
- flutter - 计时器正在跳过几分钟,几分钟后无法正常工作
- statistics - 循环遍历列以对每个列执行分析
- java - @Transactional 注释不起作用springboot
- node.js - How to create a HTTPS tunnel on my vps for my twitch bot event listen