0

我有一个基本的任务框架,其中的任务如下:

  • 做一些内容处理
  • 报告生成
  • 错误日志观察者
  • 邮递员
  • 等等

被封装在一个ITask接口中,该接口有一个Run方法和其他与状态相关的成员。

这些任务要么按计划连续运行,要么按需运行。它们要么作为 Windows 服务托管,要么作为工作机器上的控制台应用程序托管。

宿主应用程序使用一个类运行一组任务,TaskRunner该类可能使用调度、线程等。

我希望能够以比执行发布和更新更自动化的方式将任务部署到工作机器。

基本上,我希望能够发送一个 ITask 接口(或另一个子组件)的流程和实现,以按某个计划或某些设置运行。

我知道我可以动态加载程序集,而且我还看到了:MEF

解决此问题的最佳方法是什么?我应该构建一个实现并将 DLL 发布到工作进程可以读取它们的已知目录吗?我应该将 DLL 作为二进制文件发布到数据库中以供工作人员阅读吗?

4

2 回答 2

1

无论哪种方式都会奏效。在我看来,您更喜欢哪一种取决于您的操作要求。

如果您已经安装了一个良好的数据库,并且您希望任务得到严格管理和可查询,并且如果您希望将许多其他属性与任务相关联,那么数据库具有强制执行的能力一个严格的模式和查询/更新能力将是事情。

相反,如果您有一个更宽松的环境,您没有安装数据库服务器,并且您只想能够将任务推出,共享文件系统或只是一个文件删除会更有意义。

如果您对两者都没有强烈的偏好,并且如果您希望模型具有灵活性,请在任一端封装发布和加载内容,以便您可以轻松配置文件系统或数据库或其他一些提供程序。

在任何一种情况下,动态加载程序集并调用它都会很容易。

于 2009-06-03T16:13:45.043 回答
1

我的建议是查看 Codeplex 上的 WPF CAB 项目。在项目中,它具有将新 dll 注册为实现接口 IModule 的模块的概念。

您可以遵循相同的模式,仅使用 ITask,然后调用 ITask.RunTask() 或等效项。

于 2009-06-03T16:14:25.230 回答