void AddLibrariesAsDataProcessors(ScriptEngine.HostedScript.Library.StructureImpl dataProcessors) { System.Collections.Specialized.NameValueCollection appSettings = System.Web.Configuration.WebConfigurationManager.AppSettings; foreach (string typeInfo in appSettings.AllKeys) { string info = typeInfo.Replace(" ", ""); if (info.StartsWith("attachAsDataProcessor;")) { // Запись должна быть вида <key="attachAsDataProcessor;ИмяСборки;ИмяТипа" value="[ИмяОбработки]" /> // Если пункта ИмяОбработки нет - получаем из атрибута класса string[] dataProcessorInfo = info.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); if (dataProcessorInfo.Length != 3) { continue; } string typeName = dataProcessorInfo[2].Trim(); string dataProcessorName = appSettings[typeInfo] ?? ""; dataProcessorName = dataProcessorName.Replace(" ", ""); string assemblyName = dataProcessorInfo[1].Trim(); object instance = Activator.CreateInstance(assemblyName, typeName).Unwrap(); if (dataProcessorName == "") { ContextClassAttribute attribute = instance.GetType().GetCustomAttributes(typeof(ContextClassAttribute), false).FirstOrDefault() as ContextClassAttribute; if (attribute != null) { dataProcessorName = attribute.GetName(); } else { continue; } } dataProcessors.Insert(dataProcessorName, (IValue)instance); } } }