以下のようなコードがあります。基本的には、Web サービスからデータを取得し、それをクライアント側のオブジェクトに変換することを表します。
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 がプロキシを作成します。これにより、アプリで他の問題が発生します。)
上記のコードでは、次のエラーが表示されます。
タイプ マップ構成が欠落しているか、サポートされていないマッピングです。
マッピング タイプ: SomethingFromWebService -> ISomething
UserQuery+SomethingFromWebService -> UserQuery+ISomething
私の質問は、どうすれば具象型にマップし、クラスでインターフェイスを引き続き使用できるかということです。
注:このマッピングを追加しようとしました:
Mapper.CreateMap<SomethingFromWebService, ISomething>();
しかし、返されたオブジェクトはタイプSomething
ではなく、ISomething をテンプレートとして使用して生成されたプロキシを返します。