返回首页

简介
虽然做了一些Windows Workflow Foundation的研究,我碰到一个单一缺少的功能,我真的错过了在我的项目。这是对象向下铸造在工作​​流绑定架构的功能。
考虑这样一个例子:我有一个自定义活动(称之为LoadDataActivity)负载 使用API​​的一些数据对象。加载的对象的引用存储在LoadDataActivity.Data属性,这是对象类型,我以为我不知道可以装什么类型的对象。
我也有一个自定义活动ShowMessageActivity显示一些文本信息我。 ShowMessageActivity.Message String类型的属性来存储消息的信息。
考虑我设计一个顺序工作流加载一个Person对象,并显示他在消息框中的FullName属性。为了这个目的,我使用LoadDataActivity数据加载和ShowMessageActivity,显示的FullName信息。我也想绑定ShowMessageActivity.Message LoadDataActivity.Data.FullName财产的财产,但这是我卡住的地方。
工作流属性绑定对话框不允许我展开LoadDataActivity.Data财产,因为它是对象类型,它不包含FullName属性,并期待像我绝不类型转换这个属性(而不需要编写额外的代码!)为了完成我的绑定操作。
这篇文章的目的,是目前可以自定义工作流活动用于类型转换任何工作流领域,财产或活动属性所选择的类型。使用这类活动的关键价值是向下转换的对象的能力,以在工作​​流属性绑定对话框访问它们。替代的解决方案和限制无约束力的架构WF在世界自然基金会V1支持下铸造; {A}它有可能将字段添加到代码隐藏工作流和存储型铸造值有。这些值可以在工作流属性绑定访问对话框。这种方法的主要缺点是要求更改代码,这并不总是可以接受的,甚至并不总是可能的(即只有XAML的工作流);实施单独的活动,将有不同的属性类型,即,而不是有一个单一LoadDataActivity的,有多个活动:LoadPersonActivity,LoadEmployeeActivity等主要缺点 - 大量的活动实施。建议的解决方案 - TypeCastActivity和TypeCastActivitySequence
我提出了两个参数的活动TypeCastActivity - 第一个担任Object类型的输入参数,而另一个"T"型,存储型铸造的输入参数值。 "T"是由用户选择的任何类型。这种活动是实施一个泛型类型,因此它不能被添加到工具箱,并作为定期以相同的方式在设计时的活动。它也有被编译成一个单独的类库(不活动库),以避免在编译过程中的验证错误。

public class TypeCastActivity <T > : 



    Activity, ITypeCastActivity

{

锟?
}


为了使用工作流项目TypeCastActivity,TypeCastActivitySequence活动实施。它有一个特殊的活动设计,与它相关的允许添加的TypeCastActivitySequence儿童活动TypeCastActivity实例。使用TypeCastActivity和TypeCastActivitySequence活动
,为了执行内部的工作流程型铸造下降TypeCastActivitySequence工作流设计表面的活动。右击它并选择菜单项quot;添加类型转换活动quot??;
{S0}
点击活动设计菜单项后,键入浏览器对话框弹出。为了要创建TypeCastActivity,有必要指定一个类型,你要执行类型转换。

在上面的例子,我选择一个quot; Personquo​​t;类型。由于这种行动的结果,我得到新的TypeCastActivitySequence内产生的TypeCastActivity生成活动包含的参数属性类型quot; Personquo​​t;。
TypeCastActivity.Source属性可以绑定到任何对象,即工作流程输入参数,存储的Person实例。 A型铸造这样的对象,然后TypeCastActivity.Parameter财产,可用于自动存储在其余的属性绑定的工作流程,Person对象的属性修改等等。
兴趣点
执行的活动TypeCastActivity和TypeCastActivitySequence也可以审查下列主题的例子:实现泛型类型的活动;使用自定义活动设计设计器上下文菜单添加菜单项;自定义活动属性的序列化,使用修改WorkfowMarkupSerializer;使用标准型浏览器"对话框;验证动态添加活动的名称;使用反射实例化泛型类型的对象;

回答

评论会员: 时间:2