次のような2つのクラスがあります。
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; }
}
そして
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; }
}
ご覧のとおり、同じです(これらは両方ともインターフェイスを実装してこれを保証します)
その後、次のマッピングがあります。
Mapper.CreateMap<IEnumerable<SentEmailAttachmentItem>, IEnumerable<SentEmailAttachment>>();
Mapper.CreateMap<IEnumerable<SentEmailAttachment>, IEnumerable<SentEmailAttachmentItem>>();
その後、次のユニットテストを実施します。
//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));
これは失敗します-IEnumerable sentEmailAttachmentItemsは空です。 SentEmailAttachmentsのリストをマップしませんでした...
何が起こっているのでしょうか??
私はそれを単一のオブジェクトで動作させています(それぞれをそれぞれにマッピングしています)が、コレクションではありません...
コレクションタイプを明示的にマップする必要はなく、アイテムタイプのみをマップする必要があります。ただやる:
Mapper.CreateMap<SentEmailAttachment, SentEmailAttachmentItem>();
var attachments = Mapper.Map<IEnumerable<SentEmailAttachment>, List<SentEmailAttachmentItem>>(someList);
それはうまく動作します。
[〜#〜] edit [〜#〜]:コレクションでDynamicMapを使用する簡単な方法を見つけました。
IEnumerable<FakeItem> unmappedItems = Repository.GetItems();
IEnumerable<MappedItem> mappedItems = unmappedItems.Select(Mapper.DynamicMap<MappedItem>);
- オリジナルメッセージ -
Jimmyの使用方法は機能しますが、必要なすべてのマッピングに対して「CreateMap」を実行する必要がないようにできる場合は、DynamicMapを使用しようとします。 DynamicMapがコレクションとうまく機能するとは思えません。例外はスローされませんが、結果は空のセットです。
過去数日間のテストから、現時点ではコレクションにDynamicMapを使用できません(私が知っていることです)。