一起谈.NET技术,WF4.0中如何实现XAML工作流的动态加载

简介:   我接下来还是用一个例子讲解一下如何在WF 4中动态加载xaml工作流的做法吧。  1. 创建自定义的Activityusing System;using System.Collections.

  我接下来还是用一个例子讲解一下如何在WF 4中动态加载xaml工作流的做法吧。

  1. 创建自定义的Activity

image

 
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Activities;

namespace WorkflowConsoleApplication1
{

public sealed class MyActivity : CodeActivity
{
// Define an activity input argument of type string
public InArgument < string > Text { get ; set ; }

// If your activity returns a value, derive from CodeActivity<TResult>
// and return the value from the Execute method.
protected override void Execute(CodeActivityContext context)
{
// Obtain the runtime value of the Text input argument
string text = context.GetValue( this .Text);

Console.WriteLine(text);
}
}
}

  2.将这个自定义的Activity添加到流程中

image  设置它的Text属性:

image  3.将工作流的属性进行一些修改

image  注意,将BuildAction设置为Content,同时Copy to Output Directory 设置为Copy always,并且将Custom Tool设置为空白,完成操作之后,得到的xaml文件如下:

 
 
< Activity mc:Ignorable ="sap" x:Class ="WorkflowConsoleApplication1.Workflow1" sap:VirtualizedContainerService.HintSize ="240,240" mva:VisualBasic.Settings ="Assembly references and imported namespaces for internal implementation" xmlns ="http://schemas.microsoft.com/netfx/2009/xaml/activities" xmlns:local ="clr-namespace:WorkflowConsoleApplication1" xmlns:mc ="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mv ="clr-namespace:Microsoft.VisualBasic;assembly=System" xmlns:mva ="clr-namespace:Microsoft.VisualBasic.Activities;assembly=System.Activities" xmlns:s ="clr-namespace:System;assembly=mscorlib" xmlns:s1 ="clr-namespace:System;assembly=System" xmlns:s2 ="clr-namespace:System;assembly=System.Xml" xmlns:s3 ="clr-namespace:System;assembly=System.Core" xmlns:sad ="clr-namespace:System.Activities.Debugger;assembly=System.Activities" xmlns:sap ="http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation" xmlns:scg ="clr-namespace:System.Collections.Generic;assembly=System" xmlns:scg1 ="clr-namespace:System.Collections.Generic;assembly=System.ServiceModel" xmlns:scg2 ="clr-namespace:System.Collections.Generic;assembly=System.Core" xmlns:scg3 ="clr-namespace:System.Collections.Generic;assembly=mscorlib" xmlns:sd ="clr-namespace:System.Data;assembly=System.Data" xmlns:sl ="clr-namespace:System.Linq;assembly=System.Core" xmlns:st ="clr-namespace:System.Text;assembly=mscorlib" xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml" >
< local:MyActivity sad:XamlDebuggerXmlReader.FileName ="D:\temp\WorkflowConsoleApplication1\WorkflowConsoleApplication1\Workflow1.xaml" sap:VirtualizedContainerService.HintSize ="200,200" Text ="Hello,World" />
</ Activity >

  4. 通过下面的代码创建并且运行流程

 
 
using System;
using System.Linq;
using System.Activities;
using System.Activities.Statements;
using System.Activities.XamlIntegration;

namespace WorkflowConsoleApplication1
{
class Program
{
static void Main( string [] args)
{
WorkflowInvoker.Invoke(ActivityXamlServices.Load(
" workflow1.xaml " ));
}
}
}

  运行上述代码,我们会遇到一个错误。

image  这是为什么呢?MyActivity找不到?我们应该手工将xaml文件成下面这样。请注意粗体的部分,我添加了assembly的设置:

 
 
< Activity mc:Ignorable = " sap " x:Class = " WorkflowConsoleApplication1.Workflow1 " sap:VirtualizedContainerService.HintSize = " 240,240 " mva:VisualBasic.Settings = " Assembly references and imported namespaces for internal implementation " xmlns = " http://schemas.microsoft.com/netfx/2009/xaml/activities " xmlns:local = " clr-namespace:WorkflowConsoleApplication1;assembly=WorkflowConsoleApplication1 " xmlns:mc = " http://schemas.openxmlformats.org/markup-compatibility/2006 " xmlns:mv = " clr-namespace:Microsoft.VisualBasic;assembly=System " xmlns:mva = " clr-namespace:Microsoft.VisualBasic.Activities;assembly=System.Activities " xmlns:s = " clr-namespace:System;assembly=mscorlib " xmlns:s1 = " clr-namespace:System;assembly=System " xmlns:s2 = " clr-namespace:System;assembly=System.Xml " xmlns:s3 = " clr-namespace:System;assembly=System.Core " xmlns:sad = " clr-namespace:System.Activities.Debugger;assembly=System.Activities " xmlns:sap = " http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation " xmlns:scg = " clr-namespace:System.Collections.Generic;assembly=System " xmlns:scg1 = " clr-namespace:System.Collections.Generic;assembly=System.ServiceModel " xmlns:scg2 = " clr-namespace:System.Collections.Generic;assembly=System.Core " xmlns:scg3 = " clr-namespace:System.Collections.Generic;assembly=mscorlib " xmlns:sd = " clr-namespace:System.Data;assembly=System.Data " xmlns:sl = " clr-namespace:System.Linq;assembly=System.Core " xmlns:st = " clr-namespace:System.Text;assembly=mscorlib " xmlns:x = " http://schemas.microsoft.com/winfx/2006/xaml " >
< local:MyActivity sad:XamlDebuggerXmlReader.FileName = " D:\temp\WorkflowConsoleApplication1\WorkflowConsoleApplication1\Workflow1.xaml " sap:VirtualizedContainerService.HintSize = " 200,200 " Text = " Hello,World " />
</ Activity >

image  我个人认为这应该算是一个bug。但目前的情况就是这样,如果你的自定义Activity是在当前应用程序里面,则也是需要设置Assembly的信息的。当然,如果自定义Activity是单独的Assembly,则应该默认就会写上Assembly信息,那种情况反而是没有问题的。

目录
相关文章
|
25天前
|
开发框架 算法 .NET
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
|
25天前
|
开发框架 Cloud Native .NET
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
|
2月前
|
机器学习/深度学习 人工智能 Cloud Native
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台。本文深入解析 .NET 的核心优势,探讨其在企业级应用、Web 开发及移动应用等领域的应用案例,并展望未来在人工智能、云原生等方面的发展趋势。
49 3
|
2月前
|
敏捷开发 缓存 中间件
.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素
本文深入探讨了.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素,并通过企业级应用和Web应用开发的实践案例,展示了如何在实际项目中应用这些模式,旨在为开发者提供有益的参考和指导。
50 3
|
2月前
|
开发框架 安全 Java
.NET技术的独特魅力与优势,涵盖高效的开发体验、强大的性能表现、高度的可扩展性及丰富的生态系统等方面,展示了其在软件开发领域的核心竞争力
本文深入探讨了.NET技术的独特魅力与优势,涵盖高效的开发体验、强大的性能表现、高度的可扩展性及丰富的生态系统等方面,展示了其在软件开发领域的核心竞争力。.NET不仅支持跨平台开发,具备出色的安全性和稳定性,还能与多种技术无缝集成,为企业级应用提供全面支持。
47 3
|
25天前
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
|
4月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
58 7
|
4月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
104 0
|
5月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
76 0
|
5月前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?