我有一些类似下面的代码。基本上它代表了从 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作为模板生成的代理。