zoukankan      html  css  js  c++  java
  • Automapper 的ying'yong

    AutoMapper

    1.入门例子

    public class Foo
    {
        public int ID { get; set; }
    
        public string Name { get; set; }
    }
    
    public class FooDto
    {
        public int ID { get; set; }
    
        public string Name { get; set; }
    }
    
    public void Map()
    {
        var config = new MapperConfiguration(cfg => cfg.CreateMap<Foo, FooDto>());
    
        var mapper = config.CreateMapper();
    
        Foo foo = new Foo { ID = 1, Name = "Tom" };
    
        FooDto dto = mapper.Map<FooDto>(foo);
    }
    

    2.在net core的应用

    net framework 引入包: AutoMapper

    net core 引入专属包:AutoMapper.Extensions.Microsoft.DependencyInjection

    结构图:

    准备数据:

        public class Foo
        {
            public int ID { get; set; }
    
            public string Name { get; set; }
            public int Price { get; set; }
        }
        
        public class FooDto
        {
            public int ID { get; set; }
    
            public string Name { get; set; }
    
            public int NewPrice { get; set; }
    
        }
    
        public class FooProfile : Profile
        {
            public FooProfile()
            {
                //从 src 投影到 dest
                //destinationMember:投影对象
                //memberOptions:(opt:原始对象).MapFrom:使用自定义表达式映射目标成员。用于LINQ投影(ProjectTo)。
                CreateMap<Foo, FooDto>()
                    .ForMember(dest => dest.NewPrice, opt => opt.MapFrom(src => src.Price + 1));
            }
        }
    

    在Startup.cs 注入:

            //扫描profile文件
    		//如果只扫描一个FooProfile,使用 services.AddAutoMapper(FooProfile);
            services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
    

    Controller 两种方式:

        [ApiController]
        [Route("[controller]")]
        public class WeatherForecastController : ControllerBase
        {
            private readonly IMapper _mapper;
            private static readonly string[] Summaries = new[]
            {
                "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
            };
    
            private readonly ILogger<WeatherForecastController> _logger;
    
            public WeatherForecastController(ILogger<WeatherForecastController> logger, IMapper mapper)
            {
                _logger = logger;
                _mapper = mapper;
            }
    
            [HttpGet]
            public JsonResult Get()
            {
                Foo foo = new Foo { ID = 1, Name = "Tom", Price = 1 };
                //1.Profile 注入
                FooDto dto = _mapper.Map<FooDto>(foo);
                //2.不注入
                //var config = new MapperConfiguration(cfg => cfg.CreateMap<Foo, FooDto>().ForMember(dest => dest.NewPrice, opt => opt.MapFrom(src => src.Price + 2)));
                //var mapper2 = config.CreateMapper();
                //FooDto dto = mapper2.Map<FooDto>(foo);
    
                return new JsonResult(dto);
            }
        }
    

    3.参考

    丹枫无迹:【C#】AutoMapper 使用手册

  • 相关阅读:
    vmware workstation 10.0
    成为嵌入式程序员应知道的0x10个基本问题
    Linux嵌入式系统与硬件平台的关系
    vasprintf的实现
    GIT常用命令
    ip地址转化代码实例
    Linux网络编程实例解析
    openwrt的交叉编译
    appium初学者,使用之检查appium环境报错Could not detect Mac OS X Version from sw_vers output: '10.12.1’,
    第二章 mac上运行第一个appium实例
  • 原文地址:https://www.cnblogs.com/tangge/p/14873268.html
Copyright © 2011-2022 走看看