Tôi có một số mã tương tự như những gì dưới đây. Về cơ bản nó đại diện cho việc nhận dữ liệu từ một dịch vụ web và chuyển đổi nó thành các đối tượng phía máy khách.Định cấu hình AutoMapper để ánh xạ tới các loại bê tông nhưng cho phép Giao diện trong định nghĩa của lớp học của tôi
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;}
}
Vấn đề tôi có là tôi muốn sử dụng Giao diện trong các lớp của mình (HasSomething.ISomething trong trường hợp này), nhưng tôi cần có bản đồ AutoMapper cho các loại cụ thể. (Nếu tôi không lập bản đồ bê tông các loại sau đó AutoMapper sẽ tạo proxy cho tôi đó gây ra các vấn đề khác trong ứng dụng của tôi..)
Đoạn mã trên mang lại cho tôi lỗi này:
Missing type map configuration or unsupported mapping.
Mapping types: SomethingFromWebService -> ISomething
UserQuery+SomethingFromWebService -> UserQuery+ISomething
Vì vậy, câu hỏi của tôi là, làm thế nào tôi có thể ánh xạ tới một loại cụ thể và vẫn sử dụng các giao diện trong lớp của tôi?
LƯU Ý: Tôi đã thử thêm bản đồ này:
Mapper.CreateMap<SomethingFromWebService, ISomething>();
Nhưng sau đó các đối tượng quay trở lại không phải là loại Something
nó trả về một Proxy tạo sử dụng ISomething như bản mẫu.
Cảm ơn điều này, điều này đã giúp tôi rất nhiều. Trừ khi tôi nhầm, bạn chỉ cần ánh xạ thứ hai. Tôi nghĩ rằng bản đồ thứ hai phải làm cho dự phòng đầu tiên? –
Không, bạn vẫn cần ánh xạ đầu tiên cho loại bê tông, nếu không AutoMapper sẽ không biết cách ánh xạ từ SomethingFromWebService đến Something – TheWho
Cảm ơn rất nhiều vì điều này! Tôi đang đấu tranh trong 2 giờ và sửa lỗi của tôi! – Speuline