2016-08-02 3 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; 
     } 
    } 
} 

私はエラーmessaeにITypeConverter <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

を更新されます私はバージョン3.3.1に私のAutoMapperをダウングレードすることは はあなたのすべてに感謝し、私の問題を解決しました。

+0

あなたは 'TDestination Convert(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には1つのパラメータしかありません。このエラーは、3つのパラメータが必要であることを示しています。

そう...

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

にすべきである:

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

または...第2の方法は、所望のシグネチャを有する添加すべきです。

+0

私の質問が更新されました – kn3l

+0

2番目のエラーは最初のエラーとは全く異なります。それはstackoverflowの2番目の質問になるはずです。とにかく...エラーは 'context'(' ResolutionContext'型)の 'context'に' SourceValue'という名前のプロパティがないことを意味します。 'ResolutionContext'型のドキュメンテーションを探し、それが持つプロパティーを見てください。または、あなたが探しているプロパティを持っている別のタイプを使用してください。 –

関連する問題