我有一个任务管道,基本上是责任链模式的变体。
我的管道中的一个任务如下所示
internal interface IPTask<T>
{
bool CanExecute(T instance);
T Process(T instance);
}
..我的处理器看起来像
internal interface IProcessor<T>
{
T Execute(T instance);
}
我的具体实现如下所示:
public class Processor<T> : IProcessor<T>
{
private readonly ITasks<T> tasks;
public Processor(ITasks<T> tasks)
{
this.tasks= tasks;
}
public T Execute(T instance)
{
var taskstoExecute = tasks.GetTasks()
.Where(task => task.CanExecute(instance));
taskstoExecute.ToList().ForEach(task=>task.Process(instance));
return T;
}
}
..我的任务如下所示:
internal interface ITasks<T>
{
IEnumerable<IPTask<T>> GetTasks();
}
T 可以是不同的实例,但受通用合同的约束。其中一项任务是将传入对象映射到完全不同的对象并从那里转发该实例。
现在如您所见,我正在执行管道中的所有任务,我想将其修改为以下内容:
- 下一个任务的方法的输入
Execute
应该来自先前执行的任务。 - 如果
CanExecute
任务失败,则管道应停止处理任务。
你能帮我弄到这个吗?此外,您是否希望为此目的代码结构不同?