zoukankan      html  css  js  c++  java
  • 隐藏自定义复合活动的内部实现

    有的时候我们为了解决特定的问题,来自己实现一个自定义活动,该活动包含一组子活动。我们举个简单的例子,我们开发一个自定义活动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
    属性,不必也无需知道该活动内部是如果处理的。执行程序的结果和上面是一样的。

    作者:生鱼片
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Redis使用手册
    log4j.properties 输出指定类日志
    Maven中Jar包冲突,不让某个Jar包打入到工程中
    Cannot refer to the non-final local variable user defined in an enclosing scope
    PANIC: Missing emulator engine program for ‘x86’ CPU.
    Android studio 不能创建Activity等文件
    jenkins打maven包,出现Module Builds里面部分模块没有启动问题
    CentOS7 SFTP服务安装和使用
    记一次阿里云服务器被挖矿程序植入处理(简单记录下)
    利用阿里云高可用虚拟ip+keepalived+mha实现两台mysql的高可用
  • 原文地址:https://www.cnblogs.com/carysun/p/EncapsulationActivity.html
Copyright © 2011-2022 走看看