private void ApplyUnapplyExtensionServer(ExtensionManager extensionManager, bool shouldApply, ExtensionServer server) { if (shouldApply) { // add extensions foreach (Extension ext in extensionManager.CreateExtensions(server, this)) { _extensions.Add(new ExtensionEntry(ext, server)); } } else { // remove extensions _extensions.RemoveAll( delegate(ExtensionEntry entry) { if (entry.Server == server) { server.RemoveExtension(entry.Extension); return(true); } else { return(false); } }); } }
/// <summary/> protected override void OnInitialized() { base.OnInitialized(); _a = Context.Services.ExtensionManager.GetExtensionServer(new ExtensionServerAttribute(typeof(A))); _b = Context.Services.ExtensionManager.GetExtensionServer(new ExtensionServerAttribute(typeof(B))); _a.ShouldApplyExtensionsInvalidated += OnShouldApplyExtensionsInvalidated; _b.ShouldApplyExtensionsInvalidated += OnShouldApplyExtensionsInvalidated; }
internal void ReapplyExtensionServer(ExtensionManager extensionManager, ExtensionServer server) { Debug.Assert(_extensionServers != null); for (int i = 0; i < _extensionServers.Length; i++) { if (_extensionServers[i] == server) { bool shouldApply = server.ShouldApplyExtensions(this); if (shouldApply != _extensionServerIsApplied[i]) { _extensionServerIsApplied[i] = shouldApply; ApplyUnapplyExtensionServer(extensionManager, shouldApply, server); } } } }
public ExtensionEntry(Extension extension, ExtensionServer server) { this.Extension = extension; this.Server = server; }