我有一个基本上是责任链模式变化的任务管道。执行责任链变化
我在管道中的任务看起来如下
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
失败,那么管道应停止处理任务。
你能帮我解决这个问题吗?你也希望代码在结构上有不同的结构吗?