示例#1
0
        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);
            }
        }
示例#5
0
 internal void AddExtensionGroup(ExtensionRecordGroup item)
 {
     _exRecordGroups = _exRecordGroups ?? new List <ExtensionRecordGroup>();
     _exRecordGroups.Add(item);
 }