为什么插件实现 IPlugin 接口和工作流(自定义)继承代码 Activity 基础 class

Why the plugins implement IPlugin interface and Workflows (custom) inherits the Code Activity base class

基本上我在面试中被问到这个问题,我部分地回答了,

您可以通过导出 CodeActivity 摘要 base class 创建自己的自定义工作流 class 并在其中添加您的组织(业务)特定组件,例如日志记录和异常处理机制。

现在,您创建的任何自定义工作流 activity 都将派生新创建的自定义工作流 activity base class,以及所有基础class 功能将可用。

但是接口也是如此,因此为什么 IPlugin 是接口而不是抽象 class 例如 PluginBase.

因为 Dynamics CRM Workflows 依赖 Windows Workflow Foundation,插件不依赖。

关于您的 IPlugin 接口问题,实际上,如果您使用 Developer Toolkit,它会为您将使用该工具包创建的所有插件创建一个 class(我们可以说充当模板)。

由于 CodeActivity 有 35 个方法,将其抽象化 class 似乎合乎逻辑,这样开发人员就可以灵活地在 class 中的 choice/requirement 上实现 method/methods继承CodeActivity。 如果 CodeActivity 是一个接口,则必须实现 class 实现接口中的所有 35 个方法,这是不合逻辑的。 这就是为什么微软将 CodeActivity 作为抽象 class 而将 Iplugin 作为接口