代码之家  ›  专栏  ›  技术社区  ›  Jon Ryan

为什么不能让automapper参数化工作?

  •  1
  • Jon Ryan  · 技术社区  · 6 年前

    给定以下automaper配置文件:

     public class MyProfile: Profile
     {
       private int? _injectedInt;
    
        public MyProfile()
        {
    
          CreateMap<objectA, objectB>()
         .ForMember(e => e.myNullableInt, x => x.MapFrom(s =>_injectedInt.HasValue ? 100 : 0));
    
    
        }
      }
    

    以及以下代码:

    var result = queryableOfObjectA.ProjectTo<objectB>(new { _injectedInt = 1 });
    
    var resultingValue = result.FirstOrDefault().myNullableInt;
    

    为什么“resultingvalue”返回0而不是100?

    我看不出我在医生那里做错了什么:

    http://docs.automapper.org/en/stable/Queryable-Extensions.html#parameterization

    1 回复  |  直到 6 年前
        1
  •  1
  •   TheRock    6 年前

    我想在哪里 _injectedInt 可能是声明的问题。我已经写了下面的测试和100被退回。

    [TestClass]
    public class UnitTest19
    {
        [TestMethod]
        public void TestMethod1()
        {
            Mapper.Initialize(expression => expression.AddProfile(new MyProfile()));
    
            var queryableOfObjectA = new List<objectA>
            {
                new objectA
                {
                    myNullableInt = 10
                }
            };
    
            var result = queryableOfObjectA.AsQueryable().ProjectTo<objectB>(new { _injectedInt = (int?)1 });
    
            var resultingValue = result.FirstOrDefault()?.myNullableInt;
    
            Assert.AreEqual(100, resultingValue);
        }
    }
    
    public class MyProfile : Profile
    {
        public MyProfile()
        {
            int? _injectedInt = null;
    
            CreateMap<objectA, objectB>()
                .ForMember(e => e.myNullableInt, x => x.MapFrom(s => _injectedInt.HasValue ? 100 : 0));
        }
    }
    
    public class objectA
    {
        public int myNullableInt { get; set; }
    }
    
    public class objectB
    {
        public int myNullableInt { get; set; }
    }