2010-01-15 14 views
6

Trong dự án ASP.NET MVC 2 (RC) của tôi - tôi đang sử dụng AutoMapper để ánh xạ giữa một lớp LINQ to Sql (Media) và mô hình khung nhìn (MediaVM). Mô hình khung nhìn có thuộc tính SelectList cho một menu thả xuống trong chế độ xem. Tôi có một trình phân giải giá trị tùy chỉnh để điền các mục thuộc tính SelectList từ db, nhưng tôi tự hỏi liệu có cách nào để truyền một vài giá trị từ mô hình nguồn vào trình phân giải (sử dụng phương thức ConstructedBy không?) Để a) xác định mục đã chọn và b) lọc các mục từ db. Đối tượng nguồn được chuyển vào trình phân giải tùy chỉnh - nhưng trình phân giải được sử dụng trên một số mô hình chế độ xem khác nhau với các loại đối tượng nguồn khác nhau, do đó, sẽ xác định vị trí để lấy các giá trị từ cấu hình ánh xạ của tôi. Đây là mô hình điểm của tôi:AutoMapper - Làm thế nào để chuyển các tham số vào một Resolver tùy chỉnh sử dụng phương thức ConstructedBy?

Việc lập bản đồ automapper config:

Mapper.CreateMap<Media, MediaVM>() 
     .ForMember(dest => dest.slUsers, opt => opt.ResolveUsing<UsersSelectListResolver>()); 

Nó sẽ được tốt đẹp để có thể làm điều gì đó như thế này trên mệnh đề lập bản đồ .ForMember:

.ConstructedBy(src => new UsersSelectListResolver(src.UserID, src.FilterVal)) 

Có cách nào để thực hiện việc này không?

+0

Bryan, làm thế nào để bạn điền SelectList từ DB? – awaisj

Trả lời

2

Tôi đã tìm thấy bài đăng của bạn đang cố gắng làm điều tương tự. Tôi đã quyết định một cách tiếp cận đơn giản và bỏ qua việc cố gắng ánh xạ tới danh sách lựa chọn của mình trực tiếp qua AutoMaper. Tôi chỉ đơn giản là trả về một mảng vào ViewModel của tôi và tham khảo đối tượng đó cho danh sách lựa chọn của tôi. Mảng được ánh xạ, chọn đối tượng danh sách không. Đơn giản, hiệu quả. Và, IMHO từng được làm việc đó dự định nhiệm vụ - bản đồ mapper, ViewModel không bố trí

View Model code: 
     [DisplayName("Criterion Type")] 
     public virtual CriterionType[] CriterionTypes { get; set; } 

     [DisplayName("Criterion Type")] 
     public SelectList CriterionTypeList 
     { 
      get 
      { 
       return new SelectList(CriterionTypes, "Id", "Key"); 
      } 
     } 

mapper tôi:

Mapper.CreateMap<Criterion, CriterionForm>() 
      .ForMember(dest => dest.CriterionTypeList, opt => opt.Ignore());  
+0

ý tưởng hay. cảm ơn! – Bryan

8

Tôi thích ý tưởng đó là một yêu cầu tính năng. Bạn có thể làm điều gì đó như vậy ngay bây giờ, với MapFrom:

ForMember(dest => dest.slUsers, opt => opt.MapFrom(src => new UsersSelectListResolver(src).Resolve(src)); 
+0

cảm ơn jimmy! đã hy vọng bạn sẽ kêu vang và xác nhận tôi đã không bỏ lỡ điều gì đó hiển nhiên. – Bryan