2016-08-02 15 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'類型的文檔並查看它具有的屬性。或者使用具有您正在尋找的財產的另一種類型。 –