• 隐藏自定义复合活动的内部实现


    有的时候我们为了解决特定的问题,来自己实现一个自定义活动,该活动包含一组子活动。我们举个简单的例子,我们开发一个自定义活动CaryEncapsulationActivity。我们选择活动的基类为SequenceActivity,在该活动我们只提供一个TestValue的属性给外部,代码如下:

    public static DependencyProperty TestValueProperty = DependencyProperty.Register("TestValue",
                                               typeof(String), typeof(CaryEncapsulationActivity));
    
    [DescriptionAttribute("TestValue")]
    [CategoryAttribute("接口")]
    [BrowsableAttribute(true)]
    [DesignerSerializationVisibilityAttribute(
    DesignerSerializationVisibility.Visible)]
    public String TestValue
    {
       get
       {
           return ((String)(base.GetValue(CaryEncapsulationActivity.TestValueProperty)));
       }
       set
       {
           base.SetValue(CaryEncapsulationActivity.TestValueProperty, value);
       }
    }

    然后向该活动中添加两个CodeActivity,他们事件处理程序如下:
    private void codeActivity1_ExecuteCode(object sender, EventArgs e)
    {
         Console.WriteLine("我爱:{0}",TestValue);
    }
    private void codeActivity2_ExecuteCode(object sender, EventArgs e)
    {
         Console.WriteLine("我要报效:{0}", TestValue);
    }
     

    很简单这个自定义活动就完成了,我们添加到工作流中,效果如下图:     

    ca1 

        

    执行的结果如下:   

    ---工作流开始---
    我爱:我的祖国
    我要报效:我的祖国
    ---工作流结束---
    请按任意键继续. . .

        
    程序执行结果没有任何问题,但是我们只是设置了CaryEncapsulationActivity活动提供的接口属性TestValue的值,从工作流设计器我们可以看出CaryEncapsulationActivity活动是通过两个CodeActivity来执行的,这样我们就爆露了活动的内部的结构,但我们并不需要知道CaryEncapsulationActivity活动内部是怎么处理该属性的,现在我们只需要给CaryEncapsulationActivity加上如下代码为活动设计器提供强制基类: 
    [Designer(typeof(ActivityDesigner), typeof(IDesigner))]
    public partial class CaryEncapsulationActivity: SequenceActivity
    {.....}
     

    我们从新生成项目后在看下工作流设计器的效果,如下图: 
    ca2 
     
    从上图可以看出工作流设计器中的CaryEncapsulationActivity活动的子活动看不到了,这样我只需要设置TestValue
    属性,不必也无需知道该活动内部是如果处理的。执行程序的结果和上面是一样的。

    作者:生鱼片
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Mysql 如何设置字段自动获取当前时间
    如何利用OCS缓存TomcatSession全局变量(转)
    CDN技术分享
    怎么在阿里云服务器部署多个tomcat
    nginx模块开发篇 (阿里著作)
    Nginx开发从入门到精通 学习目录分享学习 (阿里著作)
    阿里云 通过YUM源安装nginx
    Java 模板引擎 jetbrick-template
    七天学会NodeJS
    Android开发之蓝牙 --修改本机蓝牙设备的可见性,并扫描周围可用的蓝牙设备
  • 原文地址:https://www.cnblogs.com/carysun/p/EncapsulationActivity.html
Copyright © 2020-2023  润新知