2012-10-25 4 views
17

私は以下のようなコードをいくつか持っています。基本的には、Webサービスからデータを取得し、それをクライアントサイドオブジェクトに変換することを表します。AutoMapperを具体的な型にマップするように設定しますが、クラスを定義するためのインタフェースを許可します

void Main() 
{ 
    Mapper.CreateMap<SomethingFromWebService, Something>();  
    Mapper.CreateMap<HasSomethingFromWebService, HasSomething>(); 
    // Service side 
    var hasSomethingFromWeb = new HasSomethingFromWebService(); 
    hasSomethingFromWeb.Something = new SomethingFromWebService 
      { Name = "Whilly B. Goode" }; 
    // Client Side     
    HasSomething hasSomething=Mapper.Map<HasSomething>(hasSomethingFromWeb); 
}  
// Client side objects 
public interface ISomething 
{ 
    string Name {get; set;} 
}  
public class Something : ISomething 
{ 
    public string Name {get; set;} 
}  
public class HasSomething 
{ 
    public ISomething Something {get; set;} 
}  
// Server side objects 
public class SomethingFromWebService 
{ 
    public string Name {get; set;} 
}  
public class HasSomethingFromWebService 
{ 
    public SomethingFromWebService Something {get; set;} 
} 

私が持っている問題は、私は私のクラス(この場合はHasSomething.ISomething)のインターフェイスを使用したいということですが、私は、具体的な種類にAutoMapperマップを持っている必要があります。 (。。私はコンクリートの型にマッピングされない場合は、AutoMapperは私のためのプロキシを作成します私のアプリでは他の問題を引き起こすこと)

上記のコードでは、私は、このエラーを与える:

Missing type map configuration or unsupported mapping.

Mapping types: SomethingFromWebService -> ISomething
UserQuery+SomethingFromWebService -> UserQuery+ISomething

だから私の質問具体的な型にマップするにはどうしたらいいですか?

注:私は、このマッピングを追加してみました:

Mapper.CreateMap<SomethingFromWebService, ISomething>(); 

しかし、その後、返されたオブジェクトは、それがテンプレートとしてISomethingを使用して生成されたプロキシを返すタイプSomethingではありません。

答えて

28

私はうまくいくと思った。

私はこれらの2つのマッピングを追加した場合:

Mapper.CreateMap<SomethingFromWebService, Something>(); 
Mapper.CreateMap<SomethingFromWebService, ISomething>().As<Something>(); 

を私はしたいと、それは動作します。

私は 'As'メソッドでドキュメントを見つけることができませんでした(グーグルで試してみてください!:)しかし、これはマッピングリダイレクトのようです。

例:このマッピングでは、As a Somethingを解決します。

+1

これはありがとう、これは私を助けてくれました。私が間違っていない限り、2番目のマッピングだけが必要です。私は第二のマッピングが最初の冗長化を行わなければならないと思いますか? –

+2

いいえ、まだ具体的なタイプの最初のマッピングが必要です。そうしないと、AutoMapperはSomethingFromWebServiceからSomethingFromWebServiceへのマッピング方法を知らないでしょう。 – TheWho

+1

ありがとうございます!私は今2時間苦労しており、それは私の問題を解決します! – Speuline

関連する問題