AutoMapper 9.0的使用

AutoMapper于2019.8.12升级9.0
从此不再支持静态的对象转换
自己琢磨了一下,写了一套扩展
官方链接如下
https://github.com/AutoMapper/AutoMapper/tree/v9.0.0
我做了一下方便使用的简单封装
public static class AutoMapperExtension
    {
        public static IServiceCollection AddAutoMapper(this IServiceCollection service)
        {
            service.TryAddSingleton<MapperConfigurationExpression>();
            service.TryAddSingleton(serviceProvider =>
            {
                var mapperConfigurationExpression = serviceProvider.GetRequiredService<MapperConfigurationExpression>();
                var instance = new MapperConfiguration(mapperConfigurationExpression);

                instance.AssertConfigurationIsValid();

                return instance;
            });
            service.TryAddSingleton(serviceProvider =>
            {
                var mapperConfiguration = serviceProvider.GetRequiredService<MapperConfiguration>();

                return mapperConfiguration.CreateMapper();
            });

            return service;
        }

        public static IMapperConfigurationExpression UseAutoMapper(this IApplicationBuilder applicationBuilder)
        {
            return applicationBuilder.ApplicationServices.GetRequiredService<MapperConfigurationExpression>();
        }
    }
调用则是在ConfigureServices方法内增加一行
services.AddAutoMapper();
在Configure方法内增加如下代码
            var expression = app.UseAutoMapper();
            expression.CreateMap<Foo, FoodDto>();
这样就完成了DI版本的AutoMapper
调用例子代码如下
public class ValuesController : ControllerBase
    {
        private IMapper Mapper { get; }

        public ValuesController(IMapper mapper)
        {
            Mapper = mapper;
        }

        // GET api/values
        [HttpGet]
        public FoodDto Get()
        {
            var model = new Foo()
            {
                Id = Guid.NewGuid(),
                Name = "test",
                Money = 15.0m
            };

            return Mapper.Map<FoodDto>(model);
        }
    }
public static class AutoMapperHelper
    {
        private static IServiceProvider ServiceProvider;

        public static void UseStateAutoMapper(this IApplicationBuilder applicationBuilder)
        {
            ServiceProvider = applicationBuilder.ApplicationServices;
        }

        public static TDestination Map<TDestination>(object source)
        {
            var mapper = ServiceProvider.GetRequiredService<IMapper>();

            return mapper.Map<TDestination>(source);
        }

        public static TDestination Map<TSource, TDestination>(TSource source)
        {
            var mapper = ServiceProvider.GetRequiredService<IMapper>();

            return mapper.Map<TSource, TDestination>(source);
        }
    }

app.UseStateAutoMapper();
[HttpGet("Static")]
        public FoodDto Static()
        {
            var model = new Foo()
            {
                Id = Guid.NewGuid(),
                Name = "test",
                Money = 15.0m
            };

            return AutoMapperHelper.Map<FoodDto>(model);
        }

public static class AutoMapperHelper
    {
        ...
        public static TDestination MapTo<TSource, TDestination>(this TSource source)
        {
            var mapper = ServiceProvider.GetRequiredService<IMapper>();

            return mapper.Map<TSource, TDestination>(source);
        }

        public static TDestination MapTo<TDestination>(this object source)
        {
            var mapper = ServiceProvider.GetRequiredService<IMapper>();

            return mapper.Map<TDestination>(source);
        }
    }


[HttpGet("Static")]
        public FoodDto Static()
        {
            var model = new Foo()
            {
                Id = Guid.NewGuid(),
                Name = "test",
                Money = 15.0m
            };

            return model.MapTo<FoodDto>();
        }

        //[HttpGet("Static")]
        //public FoodDto Static()
        //{
        //    var model = new Foo()
        //    {
        //        Id = Guid.NewGuid(),
        //        Name = "test",
        //        Money = 15.0m
        //    };

        //    return model.MapTo<Foo, FoodDto>();
        //}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值