如下,我使用自动映射器来转换任务
Mapper.CreateMap<Task, GanttTask>().ForMember(dst => dst.parentIdRaw, opt => opt.ResolveUsing<TaskParentIdResolver>())
所以在TaskParentIdResolver中,
public class TaskParentIdResolver : ValueResolver<Task, int?>
{
protected IUow Uow { get; set; }
public TaskParentIdResolver()
{
RepositoryFactories factory = new RepositoryFactories();
IRepositoryProvider provider = new RepositoryProvider(factory);
this.Uow = new Uow(provider);
}
protected override int? ResolveCore(Task source)
{
if (source.ParentId != null && source.ParentId != Guid.Empty)
{
var task = Uow.Tasks.GetById(source.ParentId.Value);
return task.Id;
}
else return null;
}
}
我面临的问题是,
var tasksList = Mapper.Map<IEnumerable<Task>, IEnumerable<GanttTask>>(Uow.Tasks.GetAll().Where(con => con.IsProjectSummary == true)).ToList();
如果我有 200 个任务,则解析器调用 200 次,每次 Uow 都需要时间返回来解析 parentId。有没有办法在解析器中缓存此任务列表,以便只有第一次 UOw 调用该任务,而所有其他时间它返回任务的缓存列表。