如何在不同的类中传递参数

时间:2012-12-21 08:42:13

标签: .net design-patterns software-design

我创建了一个由进程和任务(不是.NET API类)组成的小框架组件。

进程可以包含多个任务。

现在,在一个过程中,每个任务都应该有一个参数列表。

要求是
1.任务应来自DI
2.参数列表由Process拥有,并且应该可用于所有任务。任务将读取参数,还可以添加一些参数

当前实施 - > Initialize方法在BaseTask(从中派生所有任务)和BaseProcess(所有进程从中派生)中指定。这接受参数列表作为参数。

这些问题是否有任何设计模式?

1 个答案:

答案 0 :(得分:0)

您还可以使用工厂执行任务,而不是将任务直接嵌入到流程中。最简单的形式是代表:

public class Process {

  private readonly List<Func<Process, BaseTask>> TaskFactories
    = new List<Func<Process, BaseTask>>();

  public RegisterTask(Func<Process, BaseTask> taskFactory)
  {
    TaskFactories.Add(taskFactory);
  }

  public IEnumerable<Task> CreateTasks() {
    return TaskFactories.Select(f => f(this)).ToArray();
    //ToArray used to ensure all tasks created here and now.
  }

}

这样你就可以编写这样的任务:

public class MyTask : BaseTask { 
  public MyTask(Process p) {
    /* grab parameters from process here */
  }
}

然后你可以注册这个任务,给出Process p这样的:

public void RegisterSomeTask(Process p) {
  p.RegisterTask((process) => new MyTask(p));
}

这也消除了对Initialize方法的需求,在我看来,这种方法从来都不是一个理想的模式,因为除非你的国家管理绝对是爆炸性的,否则可能会有一个未初始化的任务可能会引发错误。上。