public static void Setup(String[] workbookNames, WorkbookEvaluator[] evaluators)
 {
     int nItems = workbookNames.Length;
     if (evaluators.Length != nItems)
     {
         throw new ArgumentException("Number of workbook names is " + nItems
                 + " but number of evaluators is " + evaluators.Length);
     }
     if (nItems < 1)
     {
         throw new ArgumentException("Must provide at least one collaborating worbook");
     }
     CollaboratingWorkbooksEnvironment env = new CollaboratingWorkbooksEnvironment(workbookNames, evaluators, nItems);
     HookNewEnvironment(evaluators, env);
 }
        private static void HookNewEnvironment(WorkbookEvaluator[] evaluators, CollaboratingWorkbooksEnvironment env)
        {

            // All evaluators will need To share the same cache.
            // but the cache takes an optional evaluation listener.
            int nItems = evaluators.Length;
            IEvaluationListener evalListener = evaluators[0].GetEvaluationListener();
            // make sure that all evaluators have the same listener
            for (int i = 0; i < nItems; i++)
            {
                if (evalListener != evaluators[i].GetEvaluationListener())
                {
                    // This would be very complex To support
                    throw new Exception("Workbook evaluators must all have the same evaluation listener");
                }
            }
            EvaluationCache cache = new EvaluationCache(evalListener);

            for (int i = 0; i < nItems; i++)
            {
                evaluators[i].AttachToEnvironment(env, cache, i);
            }

        }
 private void UnhookOldEnvironments(WorkbookEvaluator[] evaluators)
 {
     ArrayList oldEnvs = new ArrayList();
     for (int i = 0; i < evaluators.Length; i++)
     {
         oldEnvs.Add(evaluators[i].GetEnvironment());
     }
     CollaboratingWorkbooksEnvironment[] oldCWEs = new CollaboratingWorkbooksEnvironment[oldEnvs.Count];
     oldCWEs = (CollaboratingWorkbooksEnvironment[])oldEnvs.ToArray(typeof(CollaboratingWorkbooksEnvironment));
     for (int i = 0; i < oldCWEs.Length; i++)
     {
         oldCWEs[i].Unhook();
     }
 }