【代码保留】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
        }
    }
}
原文地址:https://www.cnblogs.com/volnet/p/931843.html