/// <exclude /> public override IEnumerable <PackageFragmentValidationResult> Validate() { var validationResult = new List <PackageFragmentValidationResult>(); if (this.Configuration.Count(f => f.Name == "Types") > 1) { validationResult.AddFatal(GetText("DataTypePackageFragmentInstaller.OnlyOneElement")); return(validationResult); } XElement typesElement = this.Configuration.SingleOrDefault(f => f.Name == "Types"); if (typesElement == null) { validationResult.AddFatal(GetText("DataTypePackageFragmentInstaller.MissingElement")); return(validationResult); } _typesToInstall = new List <DataTypeDescriptor>(); foreach (XElement typeElement in typesElement.Elements("Type")) { XAttribute nameAttribute = typeElement.Attribute("name"); if (nameAttribute == null) { validationResult.AddFatal(GetText("DataTypePackageFragmentInstaller.MissingAttribute").FormatWith("name"), typeElement); continue; } Type type = TypeManager.TryGetType(nameAttribute.Value); if (type == null) { validationResult.AddFatal(GetText("DataTypePackageFragmentInstaller.TypeNotConfigured").FormatWith(nameAttribute.Value)); } else if (!typeof(IData).IsAssignableFrom(type)) { validationResult.AddFatal(GetText("DataTypePackageFragmentInstaller.TypeNotInheriting").FormatWith(type, typeof(IData))); } else if (DataFacade.GetAllKnownInterfaces().Contains(type)) { validationResult.AddFatal(GetText("DataTypePackageFragmentInstaller.TypeExists").FormatWith(type)); } else { DataTypeDescriptor dataTypeDescriptor = null; try { dataTypeDescriptor = DynamicTypeManager.GetDataTypeDescriptor(type); dataTypeDescriptor.Validate(); } catch (Exception ex) { validationResult.AddFatal(GetText("DataTypePackageFragmentInstaller.InterfaceCodeError").FormatWith(type)); validationResult.AddFatal(ex); Log.LogError(LogTitle, ex); } if (dataTypeDescriptor != null) { _typesToInstall.Add(dataTypeDescriptor); this.InstallerContext.AddPendingDataType(type); } } } if (validationResult.Count > 0) { _typesToInstall = null; } return(validationResult); }