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); }
//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)); }
//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); }
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)); }
/// <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); }
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); }
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); //} }
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); } } }
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; }
// 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; } }
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); }
// 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; }
internal void AddExtensionPoint(ExtensionPointRecord item) { _extensionPoints = _extensionPoints ?? new List <ExtensionPointRecord>(); _extensionPoints.Add(item); }