Example #1
0
        internal void RegisterExtensionPoint(ExtensionPointRecord epRecord, Type extensionRootType)
        {
            ExtensionPointLoaderFactory factory;

            if (_uid2EpLoaderFactories.TryGetValue(epRecord.Uid, out factory))
            {
                return;
            }

            var assembly = _asmResolver.GetLoadedAssembly(epRecord.AssemblyUid);
            var epType   = assembly.GetType(epRecord.TypeName);

            Type extensionType, rootType;

            GetExtensionAndRootType(epType, out extensionType, out rootType);
            if (!rootType.IsAssignableFrom(extensionRootType))
            {
                throw new ArgumentException(string.Format(
                                                "The provided extension root object is invalid for ExtensionPoint [{0}]! The reason is: extension root type not matched! The required type is [{1}], while the provided extension root is of type [{2}]!",
                                                epRecord.Id, rootType.FullName, extensionRootType.FullName));
            }

            var factoryType = typeof(ExtensionPointLoaderFactory <,>).MakeGenericType(extensionType, rootType);
            IExtensionPointFactory epFactory = new ReflectionExtensionPointFactory();

            factory = Activator.CreateInstance(factoryType, epFactory, epType) as ExtensionPointLoaderFactory;

            _uid2EpLoaderFactories.Add(epRecord.Uid, factory);
        }
 // register extension builders and load extensions that extends an extenstion point declared in another addin.
 // this method is called when the specified extension point is loading.
 internal void LoadInto(ExtensionPointRecord extensionPointRecord)
 {
     _addinContext.Addin.ThrowIfAddinIsDisabled();
     if (!_addinContext.Addin.Start())
     {
         return;
     }
     _addinEngine.LoadIntoExtensionPoint(_addinContext, extensionPointRecord);
 }
Example #3
0
        //internal void RegisterExtensionBuilderFactory(IExtensionBuilderFactory ebFactory)
        //{
        //}
        #endregion

        internal ExtensionPointLoader CreateExtensionPointLoader(ExtensionPointRecord epRecord)
        {
            ExtensionPointLoaderFactory factory;

            if (!_uid2EpLoaderFactories.TryGetValue(epRecord.Uid, out factory))
            {
                throw new InvalidOperationException();
            }
            return(factory.CreateExtensionPointLoader(epRecord));
        }
Example #4
0
        //internal void RegisterExtensionBuilderFactory(IExtensionBuilderFactory ebFactory)
        //{
        //}
        #endregion

        internal ExtensionPointLoader CreateExtensionPointLoader(ExtensionPointRecord epRecord)
        {
            ExtensionPointLoaderFactory factory;

            if (!_uid2EpLoaderFactories.TryGetValue(epRecord.Uid, out factory))
            {
                throw new InvalidOperationException(string.Format("The extension point [{0}] has not been registered to the extension mannager yet!", epRecord.Path));
            }
            return(factory.CreateExtensionPointLoader(epRecord));
        }
        //internal bool ExtensionPointLoaded(ExtensionPointRecord epRecord)
        //{
        //    return _loaderFactory.ExtensionPointRegistered(epRecord);
        //}

        internal void RegisterExtensionPoint(ExtensionPointRecord epRecord, Type extensionRootType)
        {
            _loaderFactory.RegisterExtensionPoint(epRecord, extensionRootType);
            if (epRecord.Children != null)
            {
                foreach (var child in epRecord.Children)
                {
                    RegisterExtensionBuilderRecursively(child);
                }
            }
        }
 internal void UnregisterExtensionPoint(ExtensionPointRecord epRecord)
 {
     if (epRecord.Children != null)
     {
         foreach (var child in epRecord.Children)
         {
             UnregisterExtensionBuilderRecursively(child);
         }
     }
     _loaderFactory.UnregisterExtensionPoint(epRecord);
 }
 internal void UnloadExtensionPoint(ExtensionPointRecord epRecord)
 {
     _addinContext.Addin.ThrowIfAddinIsDisabled();
     if (epRecord == null)
     {
         return;
     }
     //if (!epRecord.Loaded)
     //    return;
     _addinEngine.UnloadExtensionPoint(_addinContext, epRecord);
 }
        internal void UnloadExtensionPoint(IAddinContext adnContext, ExtensionPointRecord epRecord)
        {
            _loadedExtensionPointRecords.Remove(epRecord);
            Loader epLoader;

            if (!TryGetAndRemoveLoader(epRecord.Path, true, out epLoader))
            {
                return;
            }
            //if (epLoader.Loaded)
            epLoader.Unload(adnContext);
        }
Example #9
0
        internal bool TryCreateExtensionPointLoader(ExtensionPointRecord epRecord, out ExtensionPointLoader result)
        {
            ExtensionPointLoaderFactory factory;

            if (!_uid2EpLoaderFactories.TryGetValue(epRecord.Uid, out factory))
            {
                result = null;
                return(false);
            }
            result = factory.CreateExtensionPointLoader(epRecord);
            return(true);
        }
        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 LoadExtensionPoint(ExtensionPointRecord epRecord, object extensionRoot)
 {
     _addinContext.Addin.ThrowIfAddinIsDisabled();
     if (!_addinContext.Addin.Start())
     {
         return;
     }
     if (epRecord == null)
     {
         return;
     }
     //if (epRecord.Loaded)
     //    return;
     _addinEngine.LoadExtensionPoint(_addinContext, epRecord, extensionRoot);
 }
 internal bool TryLoadExtensionPoint(ExtensionPointRecord epRecord, object extensionRoot)
 {
     _addinContext.Addin.ThrowIfAddinIsDisabled();
     if (!_addinContext.Addin.Start())
     {
         return(false);
     }
     if (epRecord == null)
     {
         return(false);
     }
     //if (epRecord.Loaded)
     //    return true;
     return(_addinEngine.TryLoadExtensionPoint(_addinContext, epRecord, extensionRoot));
 }
Example #13
0
        /// <summary>
        /// Get a list of addins that extend the specified extension point (provide extensions for it),
        /// sorted by the dependence relationship between them.
        /// </summary>
        /// <param name="extensionPoint">The extension point.</param>
        /// <returns></returns>
        internal AddinRecordSet TryGetSortedExtendingAddins(ExtensionPointRecord extensionPoint)
        {
            var result = new AddinRecordSet();

            for (int i = 0; i < _addinRecords.Count; i++)
            {
                var addin = _addinRecords[i];
                if (addin.Enabled && addin.ExtendsExtensionPoint(extensionPoint.Uid))
                {
                    result.Add(addin);
                }
            }

            return(result);
        }
Example #14
0
        internal void LoadExtensionPoint(IAddinContext declaringAddin, ExtensionPointRecord extensionPointRecord, object extensionRoot)
        {
            VerifyInitialized();

            if (extensionPointRecord.Loaded)
            {
                return;
            }

            // register the extension point itself
            _runtimeExtensionLoader.RegisterExtensionPoint(extensionPointRecord, extensionRoot.GetType());
            _runtimeExtensionLoader.LoadExtensionPoint(declaringAddin, extensionPointRecord, extensionRoot);
            extensionPointRecord.Loaded = true;

            DoLoadIntoExtensionPoint(declaringAddin, extensionPointRecord);
        }
Example #15
0
        void DoUnloadFromExtensionPoint(IAddinContext declaringAddin, ExtensionPointRecord extensionPointRecord)
        {
            // register extensions of other addins (extending addins) that extending the extension point.
            var extendingAddinRecords = _addinRelationManager.TryGetSortedExtendingAddins(extensionPointRecord);

            if (extendingAddinRecords != null)
            {
                for (int i = extendingAddinRecords.Count - 1; i >= 0; i--)
                {
                    var extendingAddin = GetOrCreateAddin(extendingAddinRecords[i]);
                    UnloadFromExtensionPoint(extendingAddin.Context, extensionPointRecord);
                }
            }
            // register extensions of the same addin that extends the extension point
            UnloadFromExtensionPoint(declaringAddin, extensionPointRecord);
        }
        void RegisterExtensionsForExtensionPoint(AddinBodyRecord addinBody, ExtensionPointRecord epRecord)
        {
            var ebGroup = addinBody.GetExtensionBuilderGroup(epRecord.Id);

            if (ebGroup != null)
            {
                _exSystemLoader.RegisterExtensionBuilderGroup(ebGroup);
            }

            var exGroup = addinBody.GetExtensionGroup(epRecord.Id);

            if (exGroup != null)
            {
                _exSystemLoader.RegisterExtensionGroup(epRecord, exGroup);
            }
        }
        internal void LoadExtensionPoint(IAddinContext adnContext, ExtensionPointRecord epRecord, object root)
        {
            ExtensionPointLoader epLoader;

            if (!TryGetLoader(epRecord.Path, false, out epLoader))
            {
                epLoader = _loaderFactory.CreateExtensionPointLoader(epRecord);
                _path2Loaders.Add(epRecord.Path, epLoader);
                _loadedExtensionPointRecords.Add(epRecord);
            }
            //if (!epLoader.Loaded)
            //{
            epLoader.TrySetRoot(root);
            epLoader.Load(adnContext);
            //}
        }
Example #18
0
        void DoLoadIntoExtensionPoint(IAddinContext declaringAddin, ExtensionPointRecord extensionPointRecord)
        {
            // register extensions of the same addin that extends the extension point
            LoadIntoExtensionPoint(declaringAddin, extensionPointRecord);

            // register extensions of other addins (extending addins) that extending the extension point.
            var extendingAddinRecords = _addinRelationManager.TryGetSortedExtendingAddins(extensionPointRecord);

            if (extendingAddinRecords != null)
            {
                for (int i = 0; i < extendingAddinRecords.Count; i++)
                {
                    var extendingAddin = GetOrCreateAddin(extendingAddinRecords[i]);
                    extendingAddin.Extension.LoadInto(extensionPointRecord);
                }
            }
        }
Example #19
0
        internal void UnloadExtensionPoint(IAddinContext declaringAddin, ExtensionPointRecord extensionPointRecord)
        {
            VerifyInitialized();

            //if (!ExtensionPointIsLoaded(extensionPointRecord))
            //    throw new InvalidOperationException(string.Format("The specified extension point [{0}] is not loaded, which do not need to be unloaded!", extensionPointRecord.Id));

            if (!extensionPointRecord.Loaded)
            {
                return;
            }

            DoUnloadFromExtensionPoint(declaringAddin, extensionPointRecord);

            _runtimeExtensionLoader.UnloadExtensionPoint(declaringAddin, extensionPointRecord);
            _runtimeExtensionLoader.UnregisterExtensionPoint(extensionPointRecord);
            extensionPointRecord.Loaded = false;
        }
Example #20
0
        // register extensions that extends an extenstion point declared in another addin.
        void UnloadFromExtensionPoint(IAddinContext adnContext, ExtensionPointRecord extensionPointRecord)
        {
            var addinRecord = adnContext.Addin.AddinRecord;
            var exGroup     = addinRecord.GetExtensionGroup(extensionPointRecord.Path);

            if (exGroup != null && exGroup.Loaded)
            {
                _runtimeExtensionLoader.UnloadExtensions(adnContext, exGroup);
                exGroup.Loaded = false;
            }

            var ebGroup = addinRecord.GetExtensionBuilderGroup(extensionPointRecord.Path);

            if (ebGroup != null && ebGroup.Loaded)
            {
                _runtimeExtensionLoader.UnregisterExtensionBuilders(ebGroup);
                ebGroup.Loaded = false;
            }
        }
Example #21
0
        internal bool TryLoadExtensionPoint(IAddinContext declaringAddin, ExtensionPointRecord extensionPointRecord, object extensionRoot)
        {
            VerifyInitialized();

            if (extensionPointRecord.Loaded)
            {
                return(true);
            }

            _runtimeExtensionLoader.RegisterExtensionPoint(extensionPointRecord, extensionRoot.GetType());
            if (!_runtimeExtensionLoader.TryLoadExtensionPoint(declaringAddin, extensionPointRecord, extensionRoot))
            {
                return(false);
            }
            extensionPointRecord.Loaded = true;

            DoLoadIntoExtensionPoint(declaringAddin, extensionPointRecord);
            return(true);
        }
Example #22
0
        // register extensions of the specified addin (addinRecord) that extends the specified extenstion point.
        internal void LoadIntoExtensionPoint(IAddinContext adnContext, ExtensionPointRecord extensionPointRecord)
        {
            var addinRecord = adnContext.Addin.AddinRecord;

            var ebGroup = addinRecord.GetExtensionBuilderGroup(extensionPointRecord.Path);

            if (ebGroup != null && !ebGroup.Loaded)
            {
                _runtimeExtensionLoader.RegisterExtensionBuilders(ebGroup);
                ebGroup.Loaded = true;
            }

            var exGroup = addinRecord.GetExtensionGroup(extensionPointRecord.Path);

            if (exGroup != null && !exGroup.Loaded)
            {
                _runtimeExtensionLoader.LoadExtensions(adnContext, extensionPointRecord, exGroup);
                exGroup.Loaded = true;
            }
        }
        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 override ExtensionPointRecord ToRecord()
        {
            var result = new ExtensionPointRecord
            {
                Name        = Name,
                Description = Description,
                TypeName    = TypeName,
                Uid         = _old.Uid,
                AssemblyUid = Type.Assembly.Uid
            };

            if (Children != null)
            {
                foreach (var child in Children)
                {
                    var childItem = child.ToRecord();
                    result.AddChild(childItem);
                }
            }
            return(result);
        }
        internal override ExtensionPointRecord ToRecord()
        {
            _uid = IndexManager.GetNextExtensionPointUid();
            var result = new ExtensionPointRecord
            {
                Id          = Id,
                Description = Description,
                TypeName    = TypeName,
                Uid         = _uid,
                AssemblyUid = Type.Assembly.Uid
            };

            if (Children != null)
            {
                foreach (var child in Children)
                {
                    var childItem = child.ToRecord();
                    result.AddChild(childItem);
                }
            }
            return(result);
        }
        internal bool TryLoadExtensionPoint(IAddinContext adnContext, ExtensionPointRecord epRecord, object root)
        {
            ExtensionPointLoader epLoader;

            if (!TryGetLoader(epRecord.Path, false, out epLoader))
            {
                if (!_loaderFactory.TryCreateExtensionPointLoader(epRecord, out epLoader))
                {
                    return(false);
                }
                _path2Loaders.Add(epRecord.Path, epLoader);
                _loadedExtensionPointRecords.Add(epRecord);
            }
            //if (!epLoader.Loaded)
            //{
            if (!epLoader.TrySetRoot(root))
            {
                return(false);
            }
            epLoader.Load(adnContext);
            //}
            return(true);
        }
 protected ExtensionPointLoader(ExtensionPointRecord epRecord)
 {
     _epRecord = epRecord;
     _children = new ExtensionLoaderCollection();
 }
        //readonly ExtensionPointRecord _old;

        internal UnaffectedExtensionPointResolution(AddinResolution declaringAddin, ExtensionPointRecord old)
            : base(declaringAddin, old) /*_old = old;*/ }
 internal IndirectlyAffectedExtensionPointResolution(AddinResolution declaringAddin, ExtensionPointRecord old)
     : base(declaringAddin)
 {
     _old = old;
 }
Example #30
0
 internal void AddExtensionPoint(ExtensionPointRecord item)
 {
     _extensionPoints = _extensionPoints ?? new List <ExtensionPointRecord>();
     _extensionPoints.Add(item);
 }