internal ExtensionRecordGroup ToRecord() { var exGroup = new ExtensionRecordGroup { ParentPath = ParentPath, RootIsExtensionPoint = RootIsExtensionPoint }; foreach (var child in Children) { exGroup.AddChild(child.ToRecord()); } return(exGroup); }
internal void UnloadExtensions(IAddinContext adnContext, ExtensionRecordGroup exRecordGroup) { if (exRecordGroup.Children == null) { return; } var extensionRecords = new List <ExtensionRecord>(exRecordGroup.Children); GetAllExtensionRecords(extensionRecords); // 从最末端开始卸载扩展 for (int i = extensionRecords.Count - 1; i >= 0; i--) { var extensionRecord = extensionRecords[i]; Loader loader; TryGetAndRemoveLoader(extensionRecord.Head.Path, true, out loader); loader.Unload(adnContext); } }
ICompositeExtensionLoader GetParentLoader(ExtensionPointRecord epRecord, ExtensionRecordGroup exRecordGroup) { ICompositeExtensionLoader parentLoader; if (exRecordGroup.RootIsExtensionPoint) { if (!TryGetLoader(exRecordGroup.ParentPath, false, out parentLoader)) { var epLoader = _loaderFactory.CreateExtensionPointLoader(epRecord); _path2Loaders.Add(epRecord.Path, epLoader); parentLoader = epLoader; } } else { TryGetLoader(exRecordGroup.ParentPath, true, out parentLoader); } return(parentLoader); }
internal void LoadExtensions(IAddinContext adnContext, ExtensionPointRecord epRecord, ExtensionRecordGroup exRecordGroup) { if (exRecordGroup.Children == null) { return; } var parentLoader = GetParentLoader(epRecord, exRecordGroup); foreach (var child in exRecordGroup.Children) { LoadExtensionsRecursively(adnContext, parentLoader, child); } }
internal void AddExtensionGroup(ExtensionRecordGroup item) { _exRecordGroups = _exRecordGroups ?? new List <ExtensionRecordGroup>(); _exRecordGroups.Add(item); }