2016-08-02 13 views
0
using System.Linq; 
using AutoMapper; 
using ShopDx3.DomainModels; 
using ShopDx3.DomainModels.Enums; 
using ShopDx3.SharedKernel; 
using ShopDx3.ViewModels; 

namespace ShopDx3.Api.Factories 
{ 
    public class OrderVmToOrderDmConverter : ITypeConverter<OrderVm, Order> 
    { 
     public Order Convert(ResolutionContext context) 
     { 
      var src = (OrderVm)context.SourceValue; 
      var servType = Enumeration.FromDisplayName<ServiceType>(src.ServiceType.Replace(" ", "")); 
      var pizzas = src.Pizzas.Select(x => Mapper.Map<PizzaVm, Pizza>(x)).ToList(); 
      var result = new Order(servType, pizzas, src.Name); 
      return result; 
     } 
    } 
} 

当我建立我得到错误messaeITypeConverter <PizzaVm,披萨> .Convert(PizzaVm,披萨,ResolutionContext)

错误CS0535 'PizzaVmToPizzaDmConverter' 不实现接口成员“ITypeConverter.Convert( PizzaVm, 比萨, ResolutionContext)” ShopDx3.Api d:\项目\ ShopDx3的\ src \ ShopDx3.Api \工厂\ PizzaVmToPizzaDmConverter.cs

现在我想

using System.Linq; 
using AutoMapper; 
using ShopDx3.DomainModels; 
using ShopDx3.DomainModels.Enums; 
using ShopDx3.SharedKernel; 
using ShopDx3.ViewModels; 

namespace ShopDx3.Api.Factories 
{ 
    public class OrderVmToOrderDmConverter : ITypeConverter<OrderVm, Order> 
    { 
     public Order Convert(OrderVm pvm, Order p, ResolutionContext context) 
     { 
      var src = (OrderVm)context.SourceValue; 
      var servType = Enumeration.FromDisplayName<ServiceType>(src.ServiceType.Replace(" ", "")); 
      var pizzas = src.Pizzas.Select(x => Mapper.Map<PizzaVm, Pizza>(x)).ToList(); 
      var result = new Order(servType, pizzas, src.Name); 
      return result; 
     } 
    } 
} 

但有了这个代码,我得到 Severity Code Description Project File Line Suppression State Error CS1061 'ResolutionContext' does not contain a definition for 'SourceValue' and no extension method 'SourceValue' accepting a first argument of type 'ResolutionContext' could be found (are you missing a using directive or an assembly reference?) ShopDx3.Api D:\Projects\ShopDx3\src\ShopDx3.Api\Factories\OrderVmToOrderDmConverter.cs 14 Active

修订

我降级我AutoMapper到3.3.1它解决了我的问题的版本, 谢谢大家。

+0

你似乎没有实现'TDestination转换(TSource源,TDestination目标,ResolutionContext上下文)' – haim770

+1

这里有什么问题? – Batuu

+3

PizzaVmToPizzaDmConverter不在您发布的代码示例中。 是否有一些你没有发布的代码?我认为有一些缺失的信息 – MichaelThePotato

回答

1

AutoMapper 5.0从ResolutionContext中移除了源值属性,以便直接传入值。事实证明,将源值放入ResolutionContext对象内部是相当缓慢的。将它们直接传递给您的类型转换器可以使AutoMapper 5.0比AutoMapper 3.x快20-50倍。

1

您的方法Convert只有一个参数。该错误意味着它需要3个参数。

所以...

public Order Convert(ResolutionContext context) 
{ 
    ... 
} 

应该是:

public Order Convert(PizzaVm pvm, Pizza p, ResolutionContext context) 
{ 
    ... 
} 

或...应该加入的第二方法,其具有期望的签名。

+0

我更新了我的问题 – kn3l

+0

你的第二个错误是完全不同的第一个。它应该是第二个问题在stackoverflow。无论如何...这个错误意味着你的'context'(类型为'ResolutionContext')没有一个名为'SourceValue'的属性。查找'ResolutionContext'类型的文档并查看它具有的属性。或者使用具有您正在寻找的财产的另一种类型。 –