详解WF4.0 Beta2中的Switch
创始人
2024-06-09 22:41:38
0

对于微软的WF工作流,很多开发人员都有过接触。对于新版的WF4.0 Beta2,有许多新特性值得我们去开发和体验。这些新特性能给我们带来事半功倍的效果。

Switch是WF4.0中新增的活动。功能类似于C#语言中的Switch语句,但是C#的Switch语句只能是一般的Int,String等类型。在WF4.0中Switch可以使用
用于自定义的复杂类型。下面例子完成根据不同的Person执行不同的分支。

1.下面是Person类,在Person类中我们必须要重写Equals方法和GetHashCode方法,代码如下:

  1. [TypeConverter(typeof(PersonConverter))]  
  2.     public class Person  
  3.     {  
  4.         public string Name { getset; }  
  5.         public int Age { getset; }  
  6.  
  7.         public Person()  
  8.         {  
  9.             this.Age = 15;  
  10.         }  
  11.  
  12.         public Person(string name, int age)  
  13.         {  
  14.             this.Name = name;  
  15.             this.Age = age;  
  16.         }  
  17.  
  18.         public Person(string name) : this()  
  19.         {  
  20.             this.Name = name;  
  21.         }  
  22.  
  23.         public override bool Equals(object obj)  
  24.         {  
  25.             Person person = obj as Person;  
  26.             if (person != null)  
  27.             {  
  28.                 return string.Equals(this.Name, person.Name);  
  29.             }  
  30.             return false;  
  31.         }  
  32.  
  33.         public override int GetHashCode()  
  34.         {  
  35.             if (this.Name != null)  
  36.             {  
  37.                 return this.Name.GetHashCode();  
  38.             }  
  39.             return 0;  
  40.         }  
  41.     } 

2.TypeConverter 类是.NET提供的类型换器 就是将一种类型(object,可以说是任何类型)转换到另一种类型(一般为string),或者将另一种类型转换回来。
我们实现上面的Person的PersonConverter,如下:

  1. public class PersonConverter : TypeConverter  
  2.     {  
  3.         public override bool CanConvertFrom(ITypeDescriptorContext context,Type sourceType)  
  4.         {  
  5.             return (sourceType == typeof(string));  
  6.         }  
  7.           
  8.         public override object ConvertFrom(ITypeDescriptorContext context,CultureInfo culture, object value)  
  9.         {  
  10.             if (value == null)  
  11.             {  
  12.                 return null;  
  13.             }  
  14.             if (value is string)  
  15.             {  
  16.                 return new Person  
  17.                 {  
  18.                     Name = (string)value  
  19.                 };  
  20.             }  
  21.             return base.ConvertFrom(context, culture, value);  
  22.         }  
  23.           
  24.         public override object ConvertTo(ITypeDescriptorContext context,CultureInfo culture,                                          object value, Type destinationType)  
  25.         {  
  26.             if (destinationType == typeof(string))  
  27.             {  
  28.                 if (value != null)  
  29.                 {  
  30.                     return ((Person)value).Name;  
  31.                 }  
  32.                 else 
  33.                 {  
  34.                     return null;  
  35.                 }  
  36.             }  
  37.             return base.ConvertTo(context, culture, value, destinationType);  
  38.         }  
  39.     } 

3.工作流设计如下:

3.1.定义一个Person类型的变量p1,Scope为Sequence。

3.2.工作流设计中首先是一个Assign活动来实例化p1,然后在Switc中根据p1的不同值来判断走不同的分支。

实例化截图

3.3.运行程序结果为:Hello Cary。

原文标题:WF4.0 Beta2:Switch活动中使用复杂类型

链接:http://www.cnblogs.com/carysun/archive/2009/10/27/wf4-beta2-switch.html

【编辑推荐】

  1. 浅谈WF 4.0 Beta1中的 跟踪机制
  2. WF4.0 Beta1中的规则引擎变化
  3. 浅谈WF 4.0 beta1的跟踪配置
  4. 详解工作流架构与实现
  5. 解析UML工作流管理系统

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...