protected internal override WorkflowScheme CreateInstance( 
     string workflowSchemeUri, IEnumerable<KeyValuePair<string, XmlReader>> customXmlSchemas)
 {
     CodeContract.Requires(!string.IsNullOrEmpty(workflowSchemeUri));
     var parser = new WorkflowSchemeParser();
     parser.Parse(workflowSchemeUri, customXmlSchemas);
     return parser.Scheme;
 }
예제 #2
0
 private void ReadInclude()
 {
     var refUri = ReadAttributes(new[] { ATT_REF })[ATT_REF];
     if (refUri == null)
         throw new WorkflowSchemeParserException("Не задан Uri подключаемого файла с описанием схемы", this);
     if (IsFileAlreadyIncluded(refUri, this))
         return;
     var parser = new WorkflowSchemeParser {_parentParser = this};
     parser.Parse(refUri, _xmlReaderSettings);
     foreach (var activity in parser.Scheme.Activities.Values)
     {
         AddActivityToScheme(activity);
     }
     foreach (var paramsBinding in parser._parametersBindings.Values)
     {
         if (_parametersBindings.ContainsKey(paramsBinding.Name))
         {
             var existingParamsBinding = _parametersBindings[paramsBinding.Name];
             foreach (var param in paramsBinding.Parameters)
             {
                 if (existingParamsBinding.Parameters.Contains(param))
                     throw new WorkflowSchemeParserException(string.Format(
                         "В файле {0} (или в подключенных в него файлах) содержится " +
                         "связывание значения параметра {1} для действия {2}, " +
                         "которое уже объявлено ранее",
                         parser.FileName, param.Name, paramsBinding.Name), this);
                 existingParamsBinding.Parameters.Add(param);
             }
         }
         else
         {
             _parametersBindings.Add(paramsBinding);
         }
     }
     _includeFileUriList.Add(refUri);
     foreach (var fileUri in parser._includeFileUriList)
     {
         _includeFileUriList.Add(fileUri);
     }
 }