Soru IEmaumerable'da eşlenemeyen Automapper


Öyle iki sınıfım var:

public class SentEmailAttachment : ISentEmailAttachment
{
    public SentEmailAttachment();

    public string FileName { get; set; }
    public string ID { get; set; }
    public string SentEmailID { get; set; }
    public string StorageService { get; set; }
    public string StorageServiceFileID { get; set; }
}

Ve

public class SentEmailAttachmentItem : ISentEmailAttachment
{
    [ItemName]
    public string ID { get; set; }
    public string SentEmailID { get; set; }
    public string FileName { get; set; }
    public string StorageService { get; set; }
    public string StorageServiceFileID { get; set; }
}

Aynı şekilde görebildiğiniz gibi (ikisi de bunu sağlamak için arayüz uygularlar)

Sonra aşağıdaki eşleme var:

Mapper.CreateMap<IEnumerable<SentEmailAttachmentItem>, IEnumerable<SentEmailAttachment>>();
Mapper.CreateMap<IEnumerable<SentEmailAttachment>, IEnumerable<SentEmailAttachmentItem>>();

Daha sonra aşağıdaki birim testine sahibim:

//create a load of sent email attachments
var listOfSentEmailAttachments = new List<SentEmailAttachment>();

for (int i = 0; i < 10; i++)
    listOfSentEmailAttachments.Add(new SentEmailAttachment { FileName = "testFileName", ID = Guid.NewGuid().ToString(), SentEmailID = Guid.NewGuid().ToString(), StorageService = "S3", StorageServiceFileID = "SomeFileID" });

var sentEmailAttachmentItems = Mapper.DynamicMap<IEnumerable<SentEmailAttachment>, IEnumerable<SentEmailAttachmentItem>>(listOfSentEmailAttachments);

var itemToTest = sentEmailAttachmentItems.First();

Assert.IsInstanceOfType(itemToTest, typeof(SentEmailAttachmentItem));

Bu başarısız - IEnumerable sentEmailAttachmentItems boş. Bu, SentEmailAttachments listesiyle eşleşmedi ...

Ne olduğuna dair bir fikrin var mı?

Tek nesneler üzerinde çalışıyorum (her birinin bir tanesini biriyle eşleştirerek) ama bir koleksiyon değil ...


44
2018-04-15 12:47


Menşei




Cevaplar:


Koleksiyon türlerini, yalnızca öğe türlerini açıkça belirtmenize gerek yoktur. Sadece yap:

Mapper.CreateMap<SentEmailAttachment, SentEmailAttachmentItem>();
var attachments = Mapper.Map<IEnumerable<SentEmailAttachment>, List<SentEmailAttachmentItem>>(someList);

Bu sadece iyi çalışır.


101
2018-04-15 15:16





DÜZENLE: DynamicMap'i koleksiyonlarla birlikte kullanmanın kolay bir yolunu buldum.

IEnumerable<FakeItem> unmappedItems = Repository.GetItems();
IEnumerable<MappedItem> mappedItems = unmappedItems.Select(Mapper.DynamicMap<MappedItem>);

- Orijinal mesaj -

Jimmy'nin kullandığı yöntem işe yarıyor, ama ihtiyacım olan her bir haritalama için "CreateMap" yapmamam gerektiğinde DynamicMap'i kullanmaya çalışıyorum. DynamicMap'in koleksiyonlarla çok iyi çalışmadığını düşünüyorum. Bir istisna atmaz, ancak sonuç boş bir settir.

Geçtiğimiz günlerde yapılan testlerden bu yana koleksiyonlar için DynamicMap'i kullanamazsınız (bildiğim).


11
2018-03-06 20:39