【代码保留】WorkflowRuntimeFactory
由于工作流运行时WorkflowRuntime在一个应用程序域中只允许存在一个实例,因此可以用单件Singleton模式来限制,并可以用工厂模式来调用,另者由于运行时需要有Start和Stop,因此也可以在工厂内添加相应的方法来启动和关闭WorkflowRuntime.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Workflow.Runtime;
namespace WorkflowHost
{
public static class WorkflowFactory
{
//Singleton instance of the workflow runtime.
private static WorkflowRuntime _workflowRuntime = null;
//Lock (sync)object.
private static object _syncRoot = new object();
//Factory method.
public static WorkflowRuntime GetWorkflowRuntime()
{
//Lock execution thread in case of multi-threaded
//(concurrent) access.
lock (_syncRoot)
{
//Check for startup condition.
if (null == _workflowRuntime)
{
//Provide for shutdown
AppDomain.CurrentDomain.ProcessExit += new EventHandler(StopWorkflowRuntime);
AppDomain.CurrentDomain.DomainUnload += new EventHandler(StopWorkflowRuntime);
//Not started, so create instance.
_workflowRuntime = new WorkflowRuntime();
//Start the runtime.
_workflowRuntime.StartRuntime();
}//if
//Return singleton instance.
return _workflowRuntime;
}//lock
}
//Shutdown method
static void StopWorkflowRuntime(object sender, EventArgs e)
{
if (_workflowRuntime != null)
{
if (_workflowRuntime.IsStarted)
{
try
{
//Stop the runtime
_workflowRuntime.StopRuntime();
}
catch (ObjectDisposedException)
{
//Already disposed of, so ignore
}//catch
}//if
}//if
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Workflow.Runtime;
namespace WorkflowHost
{
public static class WorkflowFactory
{
//Singleton instance of the workflow runtime.
private static WorkflowRuntime _workflowRuntime = null;
//Lock (sync)object.
private static object _syncRoot = new object();
//Factory method.
public static WorkflowRuntime GetWorkflowRuntime()
{
//Lock execution thread in case of multi-threaded
//(concurrent) access.
lock (_syncRoot)
{
//Check for startup condition.
if (null == _workflowRuntime)
{
//Provide for shutdown
AppDomain.CurrentDomain.ProcessExit += new EventHandler(StopWorkflowRuntime);
AppDomain.CurrentDomain.DomainUnload += new EventHandler(StopWorkflowRuntime);
//Not started, so create instance.
_workflowRuntime = new WorkflowRuntime();
//Start the runtime.
_workflowRuntime.StartRuntime();
}//if
//Return singleton instance.
return _workflowRuntime;
}//lock
}
//Shutdown method
static void StopWorkflowRuntime(object sender, EventArgs e)
{
if (_workflowRuntime != null)
{
if (_workflowRuntime.IsStarted)
{
try
{
//Stop the runtime
_workflowRuntime.StopRuntime();
}
catch (ObjectDisposedException)
{
//Already disposed of, so ignore
}//catch
}//if
}//if
}
}
}
posted on 2007-10-21 01:19 volnet(可以叫我大V) 阅读(418) 评论(0) 编辑 收藏 举报