0
我有一個場景,我有一個基於接口的集合的域模型,這意味着可能有兩種可能的類型之一。然後我想將它映射到一個相似的視圖模型,但包含兩個集合,每個類型一個集合。AutoMapper可以根據類型將集合項目複製到特定的集合嗎?
是否有可能使用AutoMapper完成此操作,因此根據相關項目的類型將單個集合映射到兩個集合?
我在下面列出了一些示例對象,其中一個註釋掉了一行,其中一個顯示了我通過使用SourceType嘗試的內容,但找不到這種方法。
域對象
public interface IItemType
{
}
public class ItemTypeOne : IItemType
{
}
public class ItemTypeTwo : IItemType
{
}
public class DomainModel
{
public List<IItemType> Items;
}
視圖模型
public class ViewModel
{
public List<ViewModelItemOne> ItemTypeOnes = new List<ViewModelItemOne>();
public List<ViewModelItemTwo> ItemsTypeTwos = new List<ViewModelItemTwo>();
}
public class ViewModelItemOne
{
public List<ItemTypeOne> ItemTypeOnes;
public List<ItemTypeTwo> ItemsTypeTwos;
}
public class ViewModelItemTwo
{
public List<ItemTypeOne> ItemTypeOnes;
public List<ItemTypeTwo> ItemsTypeTwos;
}
映射
class Program
{
static void Main(string[] args)
{
var dm = new DomainModel()
{
Items = new List<IItemType>()
{
new ItemTypeOne(),
new ItemTypeOne(),
new ItemTypeOne(),
//new ItemTypeTwo()
}
};
Mapper.CreateMap<DomainModel, ViewModel>();
Mapper.CreateMap<ItemTypeOne, ViewModelItemOne>();
Mapper.CreateMap<ItemTypeTwo, ViewModelItemTwo>();
Mapper.CreateMap<DomainModel, ViewModel>().ForMember(dest => dest.ItemTypeOnes, opt => { opt.MapFrom(src => src.Items); });
//Mapper.CreateMap<DomainModel, ViewModel>().ForMember(dest => dest.ItemTypeOnes, opt => { opt.Condition(con => con.SourceType == typeof(ItemTypeOne)); opt.MapFrom(src => src.Items); });
var vm = Mapper.Map<ViewModel>(dm);
Console.WriteLine(vm.ItemTypeOnes.Count);
Console.WriteLine(vm.ItemsTypeTwos.Count);
Console.ReadKey();
}
}
感謝現在我要看看,錯字固定的問題。正在嘗試使用dotnetfiddle來託管東西,但之前它有點片狀。 – rrrr